我有多对多的表设置。这是我关注的表格的一个例子。
many_to_many_id,foreign_key_id
1,1
1,2
1,3
2,1
2,2
3,1
3,4,
我需要给many_to_many_id
1找到在第一个集合中存在匹配外键的任何其他many_to_many_ids
。给定第一组1,2,3附加到many_to_many_id
将返回2作为1,并且2在集合内,但3不会返回,因为4不是测试集的一部分。我的老板说我应该使用动态交叉表创建两个表来与连接进行比较。我找了一些例子,但没有帮助。
答案 0 :(得分:0)
您可以使用一些简单的子查询来完成此操作。第一个将确保每个many_to_many_id
在您要查找的集合中至少有一个foreign_key_id
(1,2,3),第二个将确保在您正在寻找的集合中,即使只有一个foreign_key_id
不,也不会
SET @search_id = 1;
SELECT m.many_to_many_id FROM SampleTable m
WHERE m.many_to_many_id != @search_id
AND EXISTS ( SELECT 1 FROM SampleTable a WHERE a.many_to_many_id = m.many_to_many_id AND a.foreign_key_id IN ( SELECT b.foreign_key_id FROM SampleTable b WHERE b.many_to_many_id = @search_id ) )
AND NOT EXISTS ( SELECT 1 FROM SampleTable a WHERE a.many_to_many_id = m.many_to_many_id AND a.foreign_key_id NOT IN ( SELECT b.foreign_key_id FROM SampleTable b WHERE b.many_to_many_id = @search_id ) )
GROUP BY m.many_to_many_id