加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

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

发布时间:2020-12-12 06:33:09 所属栏目:MsSql教程 来源:网络整理
导读:假设我有两个表,“父母”和“孩子”. Parent-to-Child是一个很多:很多关系,通过标准的交叉引用表实现. 我想查找使用SQL的给定Child组的所有成员引用的Parent的所有记录(特别是MS SQL Server的T-SQL; 2005语法是可接受的). 例如,假设我有: 列表项目 父爱丽丝
假设我有两个表,“父母”和“孩子”. 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>
)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读