我有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
这是我在这里的第一个问题 - 希望没关系!
答案 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
。