假设我有以下架构和数据:
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
,因为它不存在于表记录中。
假设我有以下架构和数据:
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 的回答):或
not exists
与行构造函数一起:如果您愿意,也可以将该
values
子句放入 CTE 以使最终查询更易于阅读:一种方法是使用
VALUES
创建一个带有 id 的表表达式来检查并EXCEPT
找到丢失的那些。在
EXCEPT
像@Martin 提供的那样使用时,请记住制作它EXCEPT
ALL
,除非您想为尝试折叠重复项支付一点额外费用。顺便说一句,
VALUES
表达式可以独立存在:但是您可以通过这种方式获得默认列名。
对于一长串值,将其提供为数组和非嵌套可能更方便。更短的语法:
该任务有几个基本技术:
只需使用第二张桌子并加入他们。