我有2个表foo
和bar
,两者之间存在一对多关系。我想获得一个foos列表,其中所有相应的栏都有一列status = 'CLOSED'
。我该怎么写这个查询?
SELECT f.*
FROM foo f
JOIN bar b ON b.foo_bk = f.bk
WHERE b.status = 'CLOSED'
当前查询将返回foo
,即使它有bar
个status
值不同的CASE
。我一直在查看IF
和1
查询,但我不知道如何让他们为此案件工作。
答案 0 :(得分:2)
尝试添加子查询,如下所示
SELECT f.*
FROM foo f
JOIN bar b ON b.foo_bk = f.f_bk
WHERE b.status = 'CLOSED'
AND not exists (select 1
from bar b2
where b2.foo_bk = f.f_bk
and b.status <> 'CLOSED')
答案 1 :(得分:2)
SELECT f.* FROM foo f
JOIN bar b ON b.foo_bk = f.f_bk
WHERE f.f_bk IN (SELECT b.bk FROM bar b WHERE b.status = 'CLOSED')
AND f.f_bk NOT IN (SELECT b.bk FROM bar b WHERE b.status <> 'CLOSED')
此查询将为您提供状态为&#39; CLOSED&#39;的条形图中存在的所有行,同时省略具有其他状态的行。