1

我正在尝试使用最新产品填充 MySQL 上的产品表,这些产品被检索并存储在 products_temp 表中。因此,此方法很简单,只需对 products_temp 中的产品进行 INSERT,如下所示:

INSERT INTO products ( select products_temp.* FROM products_temp )

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

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

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

任何帮助,将不胜感激。

谢谢!

4

2 回答 2

3

您需要在INSERT和上声明除 ID 之外的列SELECT,因为字段的数量需要匹配,并且id(如您所见)不能按原样插入到目标表中。

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

一个用于测试的 SQLfiddle

编辑:你可以用更老套的方式来简化插入。您可以创建一个触发器,它只是强制主键NULL插入。

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

然后可以简单地从一个表复制到另一个表;

INSERT INTO DestTable SELECT * FROM SourceTable;

另一个 SQLfiddle

于 2013-07-30T19:07:37.093 回答
0

怎么样:

INSERT INTO products 
( 
  select products_temp.* FROM products_temp 
  where key not in (select key from products) 
)
于 2013-07-30T19:09:37.397 回答