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_column
或 select *
或 select null
或 select 42
- 都是一样的。
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_column
或 select *
或 select null
或 select 42
- 都是一样的。