2015-05-20 2 views
1

У меня есть 2 таблицы foo и bar, между ними существует отношение «один-много». Я хочу получить список foos, где все соответствующие столбцы имеют столбец status = 'CLOSED'. Как написать этот запрос?return foo только в том случае, если все объединенные штанги имеют одинаковое значение столбца

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

Текущий запрос возвращает foo, даже если у него есть один bar с другим status значения. Я искал CASE и IF запросов, но я не знаю, как заставить их работать для этого случая.

ответ

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') 
+0

@LisaMM я модифицировано мой ответ. – Parado

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') 

Этот запрос даст вам все строки, которые существуют в строке со статусом «ЗАКРЫТО», опуская строки с другими состояниями.

Смежные вопросы