SQL:如何找到父母有给定ID的孩子的所有父母

时间:2018-11-16 15:50:08

标签: sql join

我对父/子联接表有疑问。我有一个名为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。我该怎么做?

2 个答案:

答案 0 :(得分:2)

您可以使用group bywherehaving

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)