我有两个表数据和父母。基本上我想要做的是创建一个搜索查询,如果所有父项都已经过测试(Tested = True),那么只能从Data表中选择一行。以下是我的表格的例子:
Data
-------------------
ID Version Tested
A 1.1 True
B 1.2 True
C 0.2 False
D 0.6 False
-
Parents
-------------------
ChildID ParentID
C A
C B
D A
D B
D C
在这种情况下,C只会在查询中返回,因为它是唯一一个父母都经过测试的人:
Query
-------------------
ChildID Version Tested
C 0.2 False
答案 0 :(得分:0)
尝试:
select *
from data d
where not exists
(select 1
from parents p
where p.childid = d.id
and parentid in (select id from data where tested <> 'True'))
http://sqlfiddle.com/#!2/1bf20f/1/0
唯一的原因是C不是唯一返回的原因(A和B也是)因为A和B没有任何父母,你是否希望它们不以此为基础返回? (不知道他们的所有父母是否因为没有父母而接受过检测)
如果您确实希望在此基础上删除它们,请使用以下内容,并且C将是唯一返回的内容:
http://sqlfiddle.com/#!2/1bf20f/7/0
select *
from data d
where not exists
(select 1
from parents p
where p.childid = d.id
and parentid in (select id from data where tested <> 'True'))
and id in (select childid from parents)