Postgres SQL: поиск исключений при использовании предложения in - PullRequest
0 голосов
/ 03 декабря 2018

Я запускаю следующий (Postgres) SQL для таблицы, содержащей список идентификаторов.Приведенный ниже SQL вернет все идентификаторы, найденные в списке * ниже.

select id from table
where id in (1,2,3,5,8,11,13,22,34,55);

Как я могу вернуть идентификаторы, которые содержатся в списке, но отсутствуют в таблице?Я понимаю, что могу сделать это, используя временную таблицу (со списком в ней) и левое внешнее соединение, но есть ли более быстрый / умный способ?

1 Ответ

0 голосов
/ 03 декабря 2018

Чтобы проверить, существуют ли произвольные идентификаторы в вашей таблице, используйте CTE и существует

WITH ids (id) AS ( VALUES (1),(2),(3),(5),(8),(11),(13),(22),(34),(55)
)
SELECT id
FROM ids 
WHERE NOT EXISTS(SELECT TRUE FROM table WHERE table.id = ids.id)

note1: альтернативно используйте left join вместо WHERE NOT EXISTS

примечание2: может потребоваться добавить соответствующий тип приведений

Или вы можете использовать EXCEPT

WITH ids (id) AS ( VALUES (1),(2),(3),(5),(8),(11),(13),(22),(34),(55)
)
SELECT id
FROM ids 
EXCEPT ALL 
SELECT id FROM ids
...