假设我有两个表,“父母”和“孩子”. 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> )