4

次の問題があります

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で推奨されているように列とテーブルのエイリアスを指定しようとすると、同じ結果になりました。

サーバーバージョン:5.5.24-0ubuntu0.12.04.1(Ubuntu)

次のクエリは問題なく実行されます。

INSERT INTO statistics_new (SELECT * FROM statistics)
ON DUPLICATE KEY UPDATE
end_date = VALUES(end_date)
4

4 に答える 4

11

SQLFiddle の例

基本的に私はあなたがこれを望んでいると思います:

INSERT INTO statistics_new (SELECT * FROM statistics)
ON DUPLICATE KEY UPDATE
statistics_new.end_date = if(statistics_new.end_date < statistics.end_date, 
                             statistics.end_date, statistics_new.end_date);
于 2012-11-07T09:58:33.727 に答える
1

との両方statistics_newに列statisticsがありend_dateます。SQL でそれらを区別してください。

于 2012-11-07T09:56:51.943 に答える
0

最後の行で変数を設定しようとすると、次のようになります。

SET @end_date = IF(end_date < VALUES(end_date), VALUES(end_date), end_date);
于 2012-11-07T09:57:58.823 に答える