有以下問題MySQL的鍵對重複密鑰更新列是曖昧
INSERT INTO statistics_new (SELECT * FROM statistics)
->
-> ON DUPLICATE KEY UPDATE
->
-> end_date = IF(end_date < VALUES(end_date), VALUES(end_date), end_date);
ERROR 1052 (23000): Column 'end_date' in field list is ambiguous
當我試圖爲它http://dev.mysql.com/doc/refman/5.0/en/insert-select.html建議我有同樣的結果指定列和表的別名。
Server版本:5.5.24-0ubuntu0.12.04.1(Ubuntu的)
下面的查詢運行沒有問題:
INSERT INTO statistics_new (SELECT * FROM statistics)
ON DUPLICATE KEY UPDATE
end_date = VALUES(end_date)
爲什麼我們沒有「statistics_new」的行爲是如此的強硬。前綴whn在IF中使用IF DUPLICATE KEY UPDATE – user1802525
因爲數據庫引擎不知道要使用哪個列,因爲它在2個表中具有相同的名稱。所以你必須給表格命名。 –
此行爲尚不清楚。因爲1)我們不能將表別名添加到插入表中,並且需要使用全表名作爲前綴字段,2)MySQL手冊描述了通過VALUES()語句使用插入值的唯一方法,但我們可以使用「selection_table.field」表單目前尚不清楚這種方式是否屬於同一種情況。即是「ON DUPLICATE KEY UPDATE inserion.field = VALUES(selection.field)」與「ON DUPLICATE KEY UPDATE insertion.field = selection.field」相同嗎? –