SQL仅在所有父项符合条件时才选择子行

时间:2014-07-29 23:47:21

标签: sql ms-access

我有两个表数据和父母。基本上我想要做的是创建一个搜索查询,如果所有父项都已经过测试(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

1 个答案:

答案 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)