SQL将行插入另一个表中(如果它们不重复)

时间:2017-10-03 20:28:03

标签: sql sql-server tsql sql-insert

您好我无法弄清楚如何将一个表中不重复的行插入到另一个表中,我想到这样的事情

INSERT INTO Table1
       SELECT id, name, lastname FROM Table2
              WHERE id.Table1 != id.Table2 
              AND name.Table1 != name.Table2 
              AND lastname.Table1 != lastname.Table2

如果它已经存在,如何编写指定不插入的条件?

编辑:我忘了提到我只需要匹配某些列,因为这些表包含标识1,1我的解决方案如下:

    MERGE Table1 as t1
    USING (SELECT name, lastname FROM Table2) AS t2 (name, lastname) 
    ON t1.[name] = t2.[name] AND t1.[lastname] = t2.[lastname] 
    WHEN NOT MATCHED 
    THEN
    INSERT (name, lastname) VALUES (t2.[name], t2.[lastname]);

当然这只是一个例子,我使用了更多的列和数据

编辑:不重复,因为所提供的解决方案与整个表格相匹配

2 个答案:

答案 0 :(得分:5)

解决此问题的一种方法是使用except运算符:

INSERT INTO Table1
SELECT id, name, lastname FROM Table2
EXCEPT
SELECT id, name, lastname FROM Table1

答案 1 :(得分:1)

您可以使用NOT EXISTS。请注意,表格名称始终为 属性名称。

 INSERT INTO Table1
   SELECT id, name, lastname 
   FROM Table2
   WHERE NOT EXISTS (
             SELECT * 
             FROM Table1 
             WHERE Table1.id = Table2.id AND 
                   Table1.name = Table2.name AND 
                   Table1.lastname = Table2.lastname
           )