sql查询:如何才能找到没有子记录的父记录?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (20)

如何查找父表中没有记录的父表中的所有记录。

下面的工作为我找到特定子字段值的父记录.

`SELECT    ParentTable.ParentID
 FROM      ParentTable INNER JOIN
             ParentTable ON ParentTable.ParentID = ChildTable.ChildID
 WHERE     (ChildTable.ChildField_ = '2131')
 Group By
   ParentTable.ParentID
 Having
   count(distinct ChildTable.ChildField) > 0`

我是否可以更改WHERE子句?如何找到具有零个子记录的父级记录。

提问于
用户回答回答于

可以使用NOT EXISTS

SELECT ParentTable.ParentID
FROM ParentTable
WHERE NOT EXISTS (
    SELECT 1 FROM ChildTable
    WHERE ChildTable.ParentID = ParentTable.ParentID
)

还有老的左联接并检查NULL进场

SELECT ParentTable.ParentID
FROM ParentTable
LEFT JOIN ChildTable
  ON ParentTable.ParentID = ChildTable.ParentID
WHERE ChildTable.ChildID IS NULL

两种方法都试一试,看看哪一种更适合你。

用户回答回答于

外部连接父级到子级,然后有计数(*)=0。

select
  p.parent_id,
  count(*)
from
  parent p left outer join child c on p.parent_id = c.parent_id
group by
  p.parent_id
having
  count(*) = 0

扫码关注云+社区