我有很多表设置。这是我关注的表的示例。

many_to_many_id,foreign_key_id
1、1
一二
一三
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不是测试集的一部分。我的老板说过,我应该使用动态交叉表来创建两个表以与联接进行比较。我在寻找示例,但它们并没有帮助。

最佳答案

您可以通过一些简单的子查询来实现。第一个将确保您要查找的每个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


SQL Fiddle Here

关于mysql - 一张 table 上的MySQL动态交叉表数据透视表比较,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31664146/

10-10 06:38