我正在对包含ID列表的表运行以下(Postgres)SQL。下面的SQL将返回下面列表*中找到的所有ID。
select id from table
where id in (1,2,3,5,8,11,13,22,34,55);
如何返回列表中包含但表中没有的ID?我意识到我可以使用临时表(带有列表)和左外部联接来做到这一点,但是有一种更快/更聪明的方法吗?
答案 0 :(得分:2)
要检查表中是否存在任意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
note2:可能需要添加适当的类型强制转换
或者您可以使用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