我有以下两个表:

Table1
----------
ID   Name
1    A
2    B
3    C

Table2
----------
ID   Name
1    Z

我需要将数据从 Table1 插入到 Table2 。我可以使用以下语法:
INSERT INTO Table2(Id, Name) SELECT Id, Name FROM Table1

但是,在我的情况下,Table2 中可能存在重复的 ID(在我的情况下,它只是“1 ”),我不想再次复制它,因为这会引发错误。

我可以写这样的东西:
IF NOT EXISTS(SELECT 1 FROM Table2 WHERE Id=1)
INSERT INTO Table2 (Id, name) SELECT Id, name FROM Table1
ELSE
INSERT INTO Table2 (Id, name) SELECT Id, name FROM Table1 WHERE Table1.Id<>1

有没有更好的方法来做到这一点而不使用 IF - ELSE ?我想根据某些条件避免两个 INSERT INTO-SELECT 语句。

最佳答案

使用 NOT EXISTS :

INSERT INTO TABLE_2
  (id, name)
SELECT t1.id,
       t1.name
  FROM TABLE_1 t1
 WHERE NOT EXISTS(SELECT id
                    FROM TABLE_2 t2
                   WHERE t2.id = t1.id)

使用 NOT IN :
INSERT INTO TABLE_2
  (id, name)
SELECT t1.id,
       t1.name
  FROM TABLE_1 t1
 WHERE t1.id NOT IN (SELECT id
                       FROM TABLE_2)

使用 LEFT JOIN/IS NULL :
INSERT INTO TABLE_2
  (id, name)
   SELECT t1.id,
          t1.name
     FROM TABLE_1 t1
LEFT JOIN TABLE_2 t2 ON t2.id = t1.id
    WHERE t2.id IS NULL

在三个选项中,LEFT JOIN/IS NULL 的效率较低。见 this link for more details

关于sql - 在 SQL Server 中的 INSERT INTO SELECT 查询中避免重复,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2513174/

10-14 17:38
查看更多