2014-06-17 74 views
0

我有一個數據庫:groupofficecom有兩個表:INSERT INTO ... SELECT - 主鍵衝突 - 錯誤#1062

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「身份證」)關鍵「主要」

我想主鍵model_id是相同的值id在cal_events中,因爲表cf_cal_events只是cal_events的補充字段(這是一個程序,所以我不能更改它的數據庫,它將在第一次更新時消失)

謝謝各位!

+0

身份證號碼155已在表中插入你查詢 – Sadikhasan

+0

之前存在你檢查,看看是否有在cf_cal_events表中的值「155」? – codemonkey

+0

cf_cal_events爲空!這就是問題所在,我想插入有一些重複我找不到,沒有其他合理的解釋 – rand

回答

0

其實我發現了一個很不錯的功能,這是非常相似的,但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; 

功效神奇!

它插入新項目到目標表,如果它發現具有相同主鍵值的行時,它會清除它,並重新插入新的值(它從另一個更新表的偉大工程)

我希望這能解決你的問題好像解決了我的。)

1

這意味着在目標表中已經有一個具有該標識的條目。首先,檢查這可能是怎麼回事。

然後,根據需要使用此處所述的解決方案之一: "INSERT IGNORE" vs "INSERT ... ON DUPLICATE KEY UPDATE" 即UPDATE或IGNORE。

你應該使用一個ORDER BY與你有的選擇和上面的解決方案來選擇忽略哪些條目(除IGNORE以外的所有條目)。

也可能您希望完全不同,即使用UPDATE語句而不是INSERT語句。

+0

這也是一個關於這個主題的非常好的文章:http://www.xaprb.com/blog/2006/02/ 21/flexible-insert-and-update-in-mysql/ – MikkaRin

+0

不,目標表爲空,問題必須在插入時,我會嘗試'INSERT ON DUPLICATE KEY UPDATE',因爲它不是'UPDATE' – rand