比较n-n关系的所有记录

时间:2019-06-13 16:27:31

标签: mysql sql compare

我有三个表A,B和C

表A和B具有ID和其他字段,表C是A和B的n-n关系(C仅包含具有主键(id_a,id_b)和外键的A和B的IDS)。

现在,我需要验证A的一行是否与A的另一行具有相同的关联性。

示例

A = [id_a] = [1,2,3,4]
B = [id_b] = [1,2,3,4]

C = [id_a, id_b] = [[1,1],[1,3],[2,1],[2,3],[3,3]]

在这种情况下,我只需要提取id_a为1和2的记录,因为它们都与B的同一行(id_b 1和3)相关联。

id_a = 3与id_a = 1/2不同,因为它与id_b = 1没有关联

这用于运行MySQL,PHP 7(LAMP堆栈)的新Ubuntu 18.04服务器

id_a = 1的示例

SELECT id_a
FROM C
WHERE id_b IN (SELECT id_b FROM B WHERE id_a=1)
GROUP BY id_a;

1 个答案:

答案 0 :(得分:0)

精确匹配的最简单方法是使用group_concat()

select c.id_a
from (select c.id_a, group_concat(c.id_b order by c.id_b) as id_bs
      from c
      group by c.id_a
     ) c join
     (select group_concat(c.id_b order by c.id_b) as id_bs
      from c
      where c.id_a = @id_a
     ) ac
     on c.id_bs = ac.id_bs