Создать список всех строк, где значение не отображается - PullRequest
0 голосов
/ 30 мая 2018

У меня есть таблица (foo), подобная этой:

fk | value
========
A  |  1
A  |  2
B  |  1
C  |  1

Я пытаюсь создать список всех fk, где конкретное значение не появляется, например, значение 2.

Одной попыткой было бы сделать это следующим образом:

SELECT fk 
FROM foo
WHERE value <> 2;

Но это все равно вернет A, B, C, потому что A имеет две записи, и одна из них не 2.Мне нужно B, C.

Как я могу решить эту проблему?

Ответы [ 3 ]

0 голосов
/ 30 мая 2018

Вы можете найти ваше fk сопоставленное с вашим значением, а затем исключить его:

SELECT f.fk
FROM foo f
WHERE f.fk NOT IN (SELECT f1.fk FROM foo f1 WHERE f1.value = 2)
0 голосов
/ 30 мая 2018

Или с помощью GROUP BY в сочетании с HAVING NOT и условной суммой

Запрос

SELECT 
 foo.fk
FROM
 foo
GROUP BY
 foo.fk
HAVING 
 NOT SUM(foo.value = 2)

см. Демонстрацию https://www.db -fiddle.ком / ж / kyP2ykqDEHTkM1E6NsdkEn / 0

0 голосов
/ 30 мая 2018

Использование not exists:

select f.*
from foo f
where not exists (select 1 from foo f1 where f1.fk = f.fk and f1.value = 2);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...