在SQL中选择包含所有子项的父记录

前端之家收集整理的这篇文章主要介绍了在SQL中选择包含所有子项的父记录前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
假设我有两个表,“父母”和“孩子”. Parent-to-Child是一个很多:很多关系,通过标准的交叉引用表实现.

我想查找使用sql的给定Child组的所有成员引用的Parent的所有记录(特别是MS sql Server的T-sql; 2005语法是可接受的).

例如,假设我有:

>列表项目
>父爱丽丝
>父鲍勃
>查理儿童参考爱丽丝,鲍勃
> Child David引用了Alice
>儿童夏娃参考鲍勃

我的目标是:

>如果我有Child Charlie,我希望结果集包括Alice和Bob
>如果我有Child Charlie和David,我希望结果集包括Alice和NOT Bob.
>如果我有孩子查理,大卫和夏娃,我希望结果集包含任何人.

解决方法

依赖于数字技巧(其中父子链接数量=子节点数,父节点链接到所有子节点):
SELECT Parent.ParentID,COUNT(*)
FROM Parent
INNER JOIN ChildParent
    ON ChildParent.ParentID = Parent.ParentID
INNER JOIN Child
    ON ChildParent.ChildID = Child.ChildID
WHERE <ChildFilterCriteria>
GROUP BY Parent.ParentID
HAVING COUNT(*) = (
    SELECT COUNT(Child.ChildID)
    FROM Child WHERE <ChildFilterCriteria>
)

猜你在找的MsSQL相关文章