INSERT INTO table1
SELECT * FROM table2
WHERE NOT EXISTS
(SELECT 1 FROM table1
WHERE table2.id = table1.id)
1
在第四行代码中的作用是什么?我想使用table1
的记录对table2
进行增量更新。一个友好的灵魂建议我使用上面的查询,我发现在增量更新表的情况下,我在网上很常见。有人可以解释这个机制是如何工作的吗?
答案 0 :(得分:4)
检查子选择中的 presence 行,而不是这些行返回的数据。
所以我们只对感兴趣,如果有一行或没有。
但是,由于您无法选择某个select
,因此您需要将一个表达式放入选择列表中。
那可能是任何表达式。实际表达无关紧要您可以使用select some_column
或select *
或select null
或select 42
- 这些都是相同的。
答案 1 :(得分:1)
你可以在EXISTS (sub-select
的情况下选择任何一个,唯一重要的是找到一行(EXISTS为真),或者找不到行(EXISTS false)。
答案 2 :(得分:1)
EXISTS
关键字,顾名思义,用于确定表中是否存在满足指定条件的行。由于我们只需要过滤掉满足条件的行,但不需要实际检索单个列的值,我们使用select 1
代替。对于它的价值,你也可以把它写成
INSERT INTO table1
SELECT * FROM table2
WHERE NOT EXISTS
(SELECT id FROM table1
WHERE table2.id = table1.id)
不影响过滤逻辑。