我有以下两个表:
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/