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
我 运行 以下 (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