我的表设置如下:
Parent
------
id, ...
Child
-----
id, parent_id, x, y
如果包含给定parent_id的Child中的所有符合涉及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
将导致3.目前,我有一个查询,查找parent_ids,其中任何子项符合条件。然后我使用它来检索这些记录并在代码中检查它们是否所有孩子都符合标准。使用示例数据,我获得parent_id 2和3,获取包含所有子项的两个父记录,并进行评估。如果可能的话,我想用一个查询来完成这个。
答案 0 :(得分:20)
您可以使用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
答案 1 :(得分:1)
这是你需要的吗?
select id from parent where id not in(
select parent_id from chile
where x<>y
group by parent_id)
答案 2 :(得分:0)
首先应该加入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 )