Postgresql

從列表中查找表中不存在的 ID

  • March 27, 2022

假設我有以下架構和數據:

create table images(
 id int not null
);

insert into images values(1), (2), (3), (4), (6), (8);

我想執行如下查詢:

select id from images where id not exists in(4, 5, 6);

但這不起作用。上面的情況應該返回5,因為它不存在於表記錄中。

您可以對列表使用外部聯接values(類似於上面提到的 Martin 的回答):

select t.id
from (
 values (4),(5),(6) 
) as t(id)
 left join images i on i.id = t.id
where i.id is null;

not exists與行建構子一起:

select *
from ( 
  values (4),(5),(6)
) as v(id)
where not exists (select *
                 from images i
                 where i.id = v.id);

如果您願意,也可以將該values子句放入 CTE 以使最終查詢更易於閱讀:

with v (id) as (
values (4),(5),(6)
)
select v.id
from v
 left join images i on i.id = v.id
where i.id is null;

引用自:https://dba.stackexchange.com/questions/141129