我有一个数据库:groupofficecom
有两个表:
cal_events: id(Primary key), name, start_time, description,....
cf_cal_events: model_id (Primary key), col_1, col_2, col_3,....
我正在尝试执行以下代码:
INSERT INTO groupofficecom.cf_cal_events (model_id,col_1,col_2,....)
SELECT groupofficecom.cal_events.ID, '0' AS col_1, '' AS col_2,....
FROM groupofficecom.cal_events
但它一直给我错误#1062 - 重复条目'155'('155'是来自cal_events的'id')关键'PRIMARY'
我希望主键model_id
与cal_events中的id
值相同,因为表cf_cal_events只是cal_events的补充字段(这是一个程序,因此我无法更改其数据库,它将在第一次更新时消失)
谢谢你们!
答案 0 :(得分:1)
这意味着目标表中已存在具有该id的条目。 首先,检查一下这是怎么回事。
然后,使用此处描述的解决方案之一: "INSERT IGNORE" vs "INSERT ... ON DUPLICATE KEY UPDATE" 即UPDATE或IGNORE。
您应该使用ORDER BY和您拥有的选择以及上面的解决方案来选择忽略哪些条目(除IGNORE的第一个条目外)。
您可能还需要完全不同的东西,即使用UPDATE语句而不是INSERT语句。
答案 1 :(得分:1)
事实上我发现了一个非常好的功能,它与INSERT
非常相似但更聪明:
REPLACE INTO database (column_1, column_2)
SELECT source_column1, 'value' AS column2
FROM table;
或者:
REPLACE INTO database (column_1, column_2)
VALUES ('value1', 'value2')
FROM table;
像魔术一样工作!
它将新项目插入到目标表中,如果它找到具有相同主键值的行,则会删除它并重新插入新值(它非常适合从另一个表更新表)
我希望这能解决你解决我的问题;)