我正在尝试将值从一个SQL表复制到另一个。我的问题是两个表中都已经存在一些值,我只想复制唯一值。下面的代码应该显示我理想中的需求(但是那不起作用)。
INSERT INTO newTable (column1, column2, column3,ID)
SELECT column1, column2, column3,ID
FROM oldTable
WHERE Newtable.ID <> oldTable.ID
有人可以提出可行的解决方案吗?预先感谢。
答案 0 :(得分:1)
如果您使用的是SQL Server 2008+,则可以使用except语句:
INSERT INTO newTable
(
column1,
column2,
column3,
ID
)
SELECT column1,
column2,
column3,
ID
FROM oldTable
EXCEPT
SELECT column1,
column2,
column3,
ID
FROM newTable;
答案 1 :(得分:0)
这实际上取决于您要处理的记录数。
This guy has benchmarked所有不同的实现方式。哪种方法“更好”取决于记录数。
此外,如果这是一个持续的过程,最好使用INSERT触发器,这样您就可以在发生新记录时添加新记录,而不必每次都查询整个表。
答案 2 :(得分:0)
您可以尝试在where子句上使用NOT exists
。
INSERT INTO newtable
(column1,
column2,
column3,
id)
SELECT column1,
column2,
column3,
id
FROM oldtable o
WHERE NOT EXISTS (SELECT 1
FROM newtable t
WHERE t.id = o.id);