【问题标题】:SQL Insert rows into another table if they aren't duplicates [duplicate]如果不重复,则 SQL 将行插入另一个表 [重复]
【发布时间】:2017-10-03 20:28:03
【问题描述】:

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

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]);

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

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

【问题讨论】:

  • 我使用的是 sql server 2012
  • @SeanLange 啊,我以为我是通过 MySQL 标签找到的。
  • 您可能想查看这个帖子,您的问题似乎已经得到解答:stackoverflow.com/questions/656012/…
  • 感谢您的回复,但这些都不适用于我的情况,我通过 MERGE 找到了解决方案

标签: sql sql-server tsql sql-insert


【解决方案1】:

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

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

【讨论】:

  • 感谢您的回复,我忘了说我需要匹配某些列但不是全部,我找到了合并的解决方案
【解决方案2】:

您可以使用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
           )

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-09
    相关资源
    最近更新 更多