サンプル
CREATE TABLE文
CREATE TABLE daily_events ( created_on DATE NOT NULL, last_event_id INT(11) UNSIGNED NOT NULL, last_event_created_at DATETIME NOT NULL, PRIMARY KEY (created_on) );
INSERT or UPDATE 条件付き
1回目(INSERT文)INSERT INTO daily_events (created_on, last_event_id, last_event_created_at) VALUES ('2015-11-20', 1, '2015-12-21 08:00:00') ON DUPLICATE KEY UPDATE last_event_id = IF(last_event_created_at < VALUES(last_event_created_at), VALUES(last_event_id), last_event_id), last_event_created_at = IF(last_event_created_at < VALUES(last_event_created_at), VALUES(last_event_created_at), last_event_created_at);2回目(2015-12-21 08:00:00' < '2015-11-21 08:00:00'ではないので、UPDATEされない)
INSERT INTO daily_events (created_on, last_event_id, last_event_created_at) VALUES ('2015-11-20', 1, '2015-11-21 08:00:00') ON DUPLICATE KEY UPDATE last_event_id = IF(last_event_created_at < VALUES(last_event_created_at), VALUES(last_event_id), last_event_id), last_event_created_at = IF(last_event_created_at < VALUES(last_event_created_at), VALUES(last_event_created_at), last_event_created_at);3回目(2015-12-21 08:00:00' < '2016-11-10 08:00:00'なので、UPDATEされる)
INSERT INTO daily_events (created_on, last_event_id, last_event_created_at) VALUES ('2015-11-20', 1, '2016-11-10 08:00:00') ON DUPLICATE KEY UPDATE last_event_id = IF(last_event_created_at < VALUES(last_event_created_at), VALUES(last_event_id), last_event_id), last_event_created_at = IF(last_event_created_at < VALUES(last_event_created_at), VALUES(last_event_created_at), last_event_created_at);
参考文献
https://thewebfellas.com/blog/conditional-duplicate-key-updates-with-mysqlhttp://qiita.com/yuzroz/items/f0eccf847b2ea42f885f