如果所有孩子都符合标准,请选择父

Che*_*Ze5 9 sql sql-server-2008-r2

我有这样的表设置:

Parent
------
id, ...

Child
-----
id, parent_id, x, y
Run Code Online (Sandbox Code Playgroud)

如果Child中包含给定parent_id的所有行都满足涉及x和y的标准(在我的情况下为x = y),我想找到Parents或不同的parent_id(s ).

例如:

Parent
------
id
 1
 2
 3

Child
id, parent_id, x, y
1,      1,     2, 3
2,      1,     3, 4
3,      2,     5, 5
4,      2,     6, 7
5,      3,     8, 8
6,      3,     9, 9
Run Code Online (Sandbox Code Playgroud)

将导致3.目前,我有一个查询,查找parent_ids,表明任何一个孩子符合条件.然后我使用它来检索这些记录并在代码中检查它们是否所有孩子都符合标准.使用示例数据,我获得parent_id 2和3,获取包含所有子项的两个父记录,并进行评估.如果可能的话,我想用一个查询来做这件事.

Tim*_*ter 22

您可以使用 NOT EXISTS

SELECT id 
FROM Parent p
WHERE NOT EXISTS
(
   SELECT 1 FROM Child c
   WHERE c.parent_Id = p.id
   AND c.x <> c.y
)
Run Code Online (Sandbox Code Playgroud)

编辑:这是sql-fiddle:http://sqlfiddle.com/#!3/20128/1/0

  • SQL Fiddle的+1 ...从来不知道存在...非常方便. (9认同)