有以下问题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”相同吗? –