SQL 插入到不存在的地方 (select 1... 这个“1”代表什么?

SQL insert into, where not exists (select 1... what this "1" stands for?

INSERT INTO table1 
SELECT * FROM table2 
WHERE NOT EXISTS 
    (SELECT 1 FROM table1 
    WHERE table2.id = table1.id)

第四行代码中那个1的作用是什么?我想使用来自 table2 的记录对 table1 进行增量更新。一个友善的人建议我使用上面的查询,我发现在 table 的增量更新的情况下,它在网络上很常见。有人可以解释一下这个机制是如何工作的吗?

EXISTS (sub-select 的情况下,您可以 select 任何情况,唯一重要的是是否找到一行 (EXISTS true),或者没有找到行 (EXISTS false)。

关键字EXISTS,顾名思义,就是用来判断table中是否存在满足指定条件的行。由于我们只需要过滤掉满足条件的那些行,而不需要实际检索单个列的值,因此我们使用 select 1 代替。对于它的价值,你也可以把它写成

INSERT INTO table1 
SELECT * FROM table2 
WHERE NOT EXISTS 
(SELECT id FROM table1 
WHERE table2.id = table1.id)

不影响过滤逻辑。

Exists 检查子 select 中行的 存在性 ,而不检查这些行返回的数据。

所以我们只关心如果是否有一行。

但是如果没有 select 就不可能有 select,所以您需要将表达式放入 select 列表中。

可以是任何表达式。实际的表达式没有意义您可以使用 select some_columnselect *select nullselect 42 - 都是一样的。