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

Posted

技术标签:

【中文标题】SQL:如何找到父母有给定ID的孩子的所有父母【英文标题】:SQL: How to find all parents where parents have children with given id 【发布时间】:2018-11-16 15:50:08 【问题描述】:

我有一个关于父/子联接表的问题。我有一个名为 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_id 3。我该怎么做?

【问题讨论】:

孩子 1 有三个父母? 【参考方案1】:

您可以使用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

【讨论】:

这太棒了。感谢你的回答。我不知道你到底是怎么想到的。【参考方案2】:

因此,您基本上需要计算输入的 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)

【讨论】:

以上是关于SQL:如何找到父母有给定ID的孩子的所有父母的主要内容,如果未能解决你的问题,请参考以下文章

获取父母的所有可能的孩子/后代

检索给定记录的所有孩子和父母

sql查询:如何让父母没有孩子?

如何使用 JPA/Hibernate 在孩子的 id 中引用父母的 id?

如果所有孩子都符合条件,则选择父母

如何找到一个不仅是独生子女而且是唯一表妹的模特?