【发布时间】:2014-07-14 12:38:54
【问题描述】:
我有两个几乎相同的表,并且想将存在于第一个但不存在于第二个的值插入到第二个中。
我不关心用第二个缺失值更新第一个表,反之亦然。
我尝试将此选择作为测试,但即使对于我知道丢失的值,它也没有返回任何内容
select * from table1 where Not Exists(Select * from table2)
【问题讨论】:
标签: sql sql-server-2008 not-exists
我有两个几乎相同的表,并且想将存在于第一个但不存在于第二个的值插入到第二个中。
我不关心用第二个缺失值更新第一个表,反之亦然。
我尝试将此选择作为测试,但即使对于我知道丢失的值,它也没有返回任何内容
select * from table1 where Not Exists(Select * from table2)
【问题讨论】:
标签: sql sql-server-2008 not-exists
假设你有一个字段将两个表连接在一起,这样的事情会起作用:
INSERT INTO table2 (id, col1)
SELECT id, col1
FROM table1
WHERE NOT EXISTS (
SELECT 1
FROM table2
WHERE table1.id = table2.id)
您也可以使用 NOT IN 和 OUTER JOIN 完成相同的操作,但您仍然需要两个表中的匹配条件。
【讨论】:
您可以使用INSERT 语句在一般意义上做到这一点,如下所示:
INSERT INTO TABLE2(Col1, Col2, ...)
SELECT Col1, Col2, ....
FROM TABLE1 t1
WHERE NOT EXISTS
(SELECT 1 FROM Table2 t2 WHERE t2.Criteria = t1.Criteria);
同样,TABLE2 => TABLE1 也可以反过来。
您需要指定哪些列构成通用标准。请注意,如果 2 个表是独立插入的(如要求所示),则自动生成的列(如 Guids 或 IDENTITY)在 2 个表中会有所不同,并且不适合作为连接条件。
【讨论】: