从表到表的SQL插入被源表中的重复主键阻止

时间:2013-07-30 19:03:22

标签: mysql sql insert

我正在尝试使用最新产品在MySQL上填充产品表,这些产品将被检索并存储在products_temp表中。 所以这个方法很简单,只需对products_temp中的产品进行INSERT操作即可:

INSERT INTO products ( select products_temp.* FROM products_temp )

问题是,它会导致重复的主键错误,因为products_temp中的id与产品中的id冲突。

有人可以告诉我如何解决这个问题吗?

我尝试在没有id的select语句中声明字段,但这会导致“列数与第1行的值计数不匹配”

任何帮助将不胜感激。

谢谢!

2 个答案:

答案 0 :(得分:3)

您需要在INSERTSELECT上声明除ID以外的列,因为字段数需要匹配,id(如您所注意到的那样)无法按原样插入到目标表中。

INSERT INTO DestTable (field1, field2, field3) 
    SELECT field1, field2, field3 FROM SourceTable;

An SQLfiddle to test with

编辑:你可以以更简单的方式来简化插入。您可以创建一个触发器,只需在插入时强制主键NULL

CREATE TRIGGER t_DT BEFORE INSERT ON DestTable 
FOR EACH ROW
  SET NEW.id = NULL;

然后可以简单地完成从表到表的复制;

INSERT INTO DestTable SELECT * FROM SourceTable;

Another SQLfiddle

答案 1 :(得分:0)

如下:

INSERT INTO products 
( 
  select products_temp.* FROM products_temp 
  where key not in (select key from products) 
)