SQL:将新值从一个SQL表复制到另一个

时间:2018-07-03 19:51:53

标签: sql

我正在尝试将值从一个SQL表复制到另一个。我的问题是两个表中都已经存在一些值,我只想复制唯一值。下面的代码应该显示我理想中的需求(但是那不起作用)。

INSERT INTO newTable (column1, column2, column3,ID)
    SELECT column1, column2, column3,ID
    FROM oldTable 
    WHERE Newtable.ID <> oldTable.ID

有人可以提出可行的解决方案吗?预先感谢。

3 个答案:

答案 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); 

SQL-Server SQLFIDDLE

My-sql SQLFIDDLE

Oracle SQLFIDDLE