11

我有这样的表设置:

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

Child
-----
id, parent_id, x, y

如果 Child 中包含给定 parent_id 的所有行都满足涉及 x 和 y 的标准(在我的情况下为 x = y),我想找到父母或不同的 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

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

4

3 回答 3

24

您可以使用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
)

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

于 2012-08-22T14:17:21.457 回答
1

这是你需要的吗?

  select id from parent where id not in(
    select parent_id from child 
    where x<>y
    group by parent_id)
于 2012-08-22T14:17:25.713 回答
1

应该先加入2张桌子,因为父母没有满足的孩子

并且应该为 pa_id 列添加索引

SELECT DISTINCT pa.id 
FROM pa INNER JOIN c ON c.pa_id = pa.id 
WHERE NOT EXISTS ( SELECT 1 FROM c WHERE c.parent_Id = p.id and c.x <> c.y )
于 2017-03-24T11:22:08.827 回答