Postgres SQL:使用 in 子句时查找异常

Postgres SQL: Find exceptions when using an in clause

我 运行 以下 (Postgres) SQL 反对包含 ID 列表的 table。下面的 SQL 将 return 在下面的列表*中找到的所有 ID。

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

如何 return 包含在列表中但不在 table 中的 ID?我意识到我可以使用临时 table(其中包含列表)和左外连接来做到这一点,但是有 quicker/cleverer 方式吗?

要检查您的 table 中是否存在任意 ID,请使用 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