仅当所有连接的栏具有相同的列值时才返回foo

时间:2015-05-20 13:03:04

标签: sql informix

我有2个表foobar,两者之间存在一对多关系。我想获得一个foos列表,其中所有相应的栏都有一列status = 'CLOSED'。我该怎么写这个查询?

SELECT f.* 
FROM foo f
JOIN bar b ON b.foo_bk = f.bk
WHERE b.status = 'CLOSED'

当前查询将返回foo,即使它有barstatus值不同的CASE。我一直在查看IF1查询,但我不知道如何让他们为此案件工作。

2 个答案:

答案 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;的条形图中存在的所有行,同时省略具有其他状态的行。