return foo 仅当所有连接的条具有相同的列值时
return foo only if all joined bar have the same column value
我有 2 个表 foo
和 bar
,两者之间是一对多的关系。我想获得一个 foos 列表,其中所有相应的条都有一列 status = 'CLOSED'
。我应该如何编写该查询?
SELECT f.*
FROM foo f
JOIN bar b ON b.foo_bk = f.bk
WHERE b.status = 'CLOSED'
当前查询将 return foo
,即使它有一个 bar
具有不同的 status
值。我一直在查看 CASE
和 IF
查询,但我不知道如何让它们在这种情况下工作。
尝试添加如下子查询
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')
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')
此查询将为您提供状态为 'CLOSED' 的栏中存在的所有行,同时忽略其他状态的行。
我有 2 个表 foo
和 bar
,两者之间是一对多的关系。我想获得一个 foos 列表,其中所有相应的条都有一列 status = 'CLOSED'
。我应该如何编写该查询?
SELECT f.*
FROM foo f
JOIN bar b ON b.foo_bk = f.bk
WHERE b.status = 'CLOSED'
当前查询将 return foo
,即使它有一个 bar
具有不同的 status
值。我一直在查看 CASE
和 IF
查询,但我不知道如何让它们在这种情况下工作。
尝试添加如下子查询
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')
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')
此查询将为您提供状态为 'CLOSED' 的栏中存在的所有行,同时忽略其他状态的行。