SQL插入,哪里不存在(选择1 ...这是什么" 1"代表什么?

时间:2015-01-30 08:28:39

标签: sql insert sql-server-2012

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

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

3 个答案:

答案 0 :(得分:4)

检查子选择中的 presence 行,而不是这些行返回的数据。

所以我们只对感兴趣,如果有一行或没有。

但是,由于您无法选择某个select,因此您需要将一个表达式放入选择列表中。

那可能是任何表达式。实际表达无关紧要您可以使用select some_columnselect *select nullselect 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)

不影响过滤逻辑。