忽略Insert from select语句SQL中的重复键错误

问题描述 投票:0回答:1

从选择插入数据时是否有方法或命令忽略重复的主键错误?

解释 假设我有这个查询:

Insert into my_table values (select * from my_second_table)
但是
my_table
id
上有一个主键。另外
my_second_table
有一个名为
id
的列,因此在尝试插入时会导致重复的主键错误。

我知道我可以使用

go
避免此类问题,但在这种情况下我无法使用它,因为它是从选择中插入的,或者至少是我所知道的。

有什么我可以做的吗?

sql
1个回答
3
投票

不同的数据库有不同的冲突解决方法。以下内容适用于大多数数据库:

Insert into my_table values ( . . . )  -- you should always list all the columns
     select . . .   -- you should list all the columns
     from my_second_table t2
     where not exists (select 1 from my_table t where t.id = t2.id);

这不是一个完美的解决方案,因为竞争条件可能会导致问题。但如果执行此操作时服务器上没有运行其他数据修改查询,它将起作用。

© www.soinside.com 2019 - 2024. All rights reserved.