从select语句SQL中忽略Insert中的错误

时间:2017-12-27 13:11:56

标签: sql

从select中插入数据时是否存在忽略重复主键错误的方法或命令?

解释 让我们假设我有这样的查询:Insert into my_table values (select * from my_second_table)my_tableid上有一个主键。此外,my_second_table有一个名为id的列,因此在尝试插入时会导致重复的主键错误。

我知道我可以使用go来避免这些问题但在这种情况下我无法使用它,因为它是来自select的插入,或者至少是我所知道的。

我能做些什么吗?

1 个答案:

答案 0 :(得分:2)

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

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

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