Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
忽略select语句SQL中的Insert错误_Sql - Fatal编程技术网

忽略select语句SQL中的Insert错误

忽略select语句SQL中的Insert错误,sql,Sql,从select插入数据时,是否有方法或命令忽略重复的主键错误 解释 假设我有这样一个查询:Insert into my_table values从my_second_table中选择*但my_table的id上有一个主键。此外,my_second_table有一个名为id的列,因此在尝试插入时会导致重复的主键错误 我知道我可以使用go避免此类问题,但在这种情况下,我不能使用它,因为它是从select插入的,或者至少是我所知道的 我能做些什么吗?不同的数据库有不同的冲突解决方法。以下内容适用于大多

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

解释 假设我有这样一个查询:Insert into my_table values从my_second_table中选择*但my_table的id上有一个主键。此外,my_second_table有一个名为id的列,因此在尝试插入时会导致重复的主键错误

我知道我可以使用go避免此类问题,但在这种情况下,我不能使用它,因为它是从select插入的,或者至少是我所知道的


我能做些什么吗?

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

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

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

在这种情况下使用merge语句您使用的是什么RDBMS?如果使用Sql server,您可以查看ignore\u dup\u key=on@MartinSmith我正在使用MSSQLSnice,我想做一些类似的事情。问题是执行该操作需要花费太多的时间和资源,但我将尝试一下。@LuisfelipeDejesusMunoz。你只需要在我的tableid上建立一个索引。实际上,我只是以id为例。我真正的主键是一个由5列组成的聚集键,表上已经有一个索引和一些聚集索引了。我试过了,它成功了。谢谢这只是有点慢,但我现在不在乎,让我们在几个月后看看。我最终使用左连接而不是子查询