我有三个表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;
答案 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