微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在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>
)

原文地址:https://www.jb51.cc/mssql/78726.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐