table1:bo_indexable_attribute
id version mcs name search_id
285 3 13 name1 16
286 3 13 name2 16
287 3 13 name3 16
我想要的是复制此表的内容并将其再次插入其中,但这次使用不同的mcs列 所以我的尝试是
CREATE TEMPORARY TABLE bo_scenario_indexable_attribute_temp (SELECT * FROM bo_scenario_indexable_attribute WHERE mcs = @sales );
UPDATE bo_scenario_indexable_attribute_temp SET mcs = @sales_master;
INSERT INTO bo_scenario_indexable_attribute SELECT * FROM bo_scenario_indexable_attribute_temp;
但是这给了我Duplicate entry '285' for key 'PRIMARY'
任何建议??
答案 0 :(得分:0)
您已通过第一个语句将表复制到临时表中。然后在第二个你进行更新,在第三个statament中,你试图在第一个表中插入相同的记录。也许您的id列具有唯一键,因此您可以获得“重复主键的重复条目”。
答案 1 :(得分:0)
正如@Franky指出的那样,您的id
列具有唯一约束。使用此:
INSERT INTO bo_scenario_indexable_attribute SELECT version, mcs, name, search_id FROM bo_scenario_indexable_attribute_temp;
通过不插入id
值,将为列分配一个新的未使用的id值,该值满足列上的唯一约束。
根据第一条评论进行编辑:
使用以下查询:
CREATE TEMPORARY TABLE bo_scenario_indexable_attribute_temp (SELECT version, mcs, name, search_id FROM bo_scenario_indexable_attribute WHERE mcs = @sales );
UPDATE bo_scenario_indexable_attribute_temp SET mcs = @sales_master;
INSERT INTO bo_scenario_indexable_attribute SELECT version, mcs, name, search_id FROM bo_scenario_indexable_attribute_temp;
您遇到了这个错误,因为您在SELECT中获取了比插入INSERT中更多的列。