gpt4 book ai didi

sql - 避免 SQL Server 中 INSERT INTO SELECT 查询中的重复

转载 作者:行者123 更新时间:2023-12-01 16:55:05 25 4
gpt4 key购买 nike

我有以下两个表:

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 语句。

最佳答案

使用不存在:

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com