該当レコードがなければINSERT、あったらUPDATEをするON DUPLICATE KEY UPDATE
普段はまったくSQL書かないんですが、ちょっと必要なタスクができたので書きました。
要件は下記。
・挿入データのPRIMARY KEYが重複していなければINSERT(新規追加)
・PRIMARY KEYが重複していればUPDATE(以下条件のときのみ)
・条件:挿入データの更新日付が、重複しているデータの更新日付よりも新しかった場合のみUPDATEかける
まずは例のSQLを。
例:
INSERT INTO user_login ( user_id, code, last_update_datetime, ins_datetime, ) VALUES ( 10001, 'game1', "2013-03-28 21:12:34", now() ) ON DUPLICATE KEY UPDATE user_id=values(user_id), code=values(code), last_update_datetime= IF(last_update_datetime < values(last_update_datetime), values(last_update_datetime),last_update_datetime);
>・挿入データのPRIMARY KEYが重複していなければINSERT(新規追加)
>・PRIMARY KEYが重複していればUPDATE
この要件はON DUPLICATE KEY UPDATEを利用すると満たせる。
>・条件:挿入データの更新日付が、重複しているデータの更新日付よりも新しかった場合のみUPDATEかける
この要件は、
IF(last_update_datetime < values(last_update_datetime), values(last_update_datetime),last_update_datetime);
で満たせる。
values(hogehoge)という値の指定の仕方は
INSERT時に入るはずだった値を参照することができます。
つまり今回の場合だと、values(user_id)は10001であり、
values(last_update_datetime)は"2013-03-28 21:12:34"が入っているということです。