我对父/子联接表有疑问。我有一个名为parent_children的联接表。该表包含一个parent_id和child_id。像这样:
parent_id | child_id
1 1
1 2
1 3
2 1
2 3
3 1
3 4
我想要的是在某个列表中找到所有有孩子的父母。因此,假设该列表包含1和3,然后我想要parent_id 1和2。如果该列表包含4,我想要parent_id3。我该怎么做?
答案 0 :(得分:2)
您可以使用group by
,where
和having
:
select parent_id
from t
where child_id in (1, 3)
group by parent_id
having count(*) = 2; -- "2" is the number of items in the list
这假定表中没有重复的父/子行。如果可能的话,请使用count(distinct child_id) = 2
。
答案 1 :(得分:0)
因此,您基本上需要计算输入的IN列表中的出现次数。 以下内容可以帮助您。
create table parent_children(parent_id int, child_id int)
insert into parent_children values(1,1)
insert into parent_children values(1,2)
insert into parent_children values(1,3)
insert into parent_children values(2,1)
insert into parent_children values(2,3)
insert into parent_children values(3,1)
insert into parent_children values(3,4)
with list_data
as(select *
from (values(1),(3))as t(x)
)
select a.x
from list_data a
left join parent_children b
on a.x=b.child_id
group by a.x
having count(*) = count(distinct b.parent_id)