在MySQL中选择包含所有子项的父记录

时间:2012-02-13 18:50:59

标签: mysql sql

我有3张桌子:

  • 父子

父母与子女之间存在多对多关系,通过父母联接表实现。

我正在寻找一个查询,它会给我所有父母一个给定的子ID列表。 但是 - 它必须完全匹配,即父母必须匹配,只有它确实具有给定的子ID设置,即不少于,但也不是更多(我正在努力与“不再”部分)。

我有类似的要求:Select Parent Record With All Children in SQL 除了孩子可以有多个父母。

举一个具体的例子:

select * from parent

parent_id  name
------------------------------------
1          Parent 1
2          Parent 2

select * from child

child_id  name
------------------------------------
1         Child 1
2         Child 2
3         Child 3

select * from parent_child

parent_child_id  parent_id  child_id
------------------------------------
1                1          1
2                1          2
3                1          3
4                2          1
5                2          3

即。如果提供子ID 1,2,3必须返回父ID 1 ,因为只有父1才链接到所有3个给定的子ID。

提供子ID 1和3,必须返回父ID 2 ,因为只有父2才链接到 子1和3

这是我在这里的第一个问题 - 希望没关系!

1 个答案:

答案 0 :(得分:1)

尝试:

select parent_id
from parent_child
group by parent_id
having count(child_id) = 2 and
       count(case when child_id in (1,3) then child_id end) = 2

- 对于child_id set(1,3)。对于child_id集(1,2,3),请相应更新in条件,并将 = 2条件更改为= 3