MySQLでもbulk update ・・・的なことをしたかった話。
普通にアップデートするだけだと
UPDATE users SET yatin = 'taro' WHERE id = 1; UPDATE users SET yatin = 'hanako' WHERE id = 2;
て書くが、1レコードごとに1クエリ走ってしまい、5万行を一括で更新するときとかだと以上に遅い。
そこでON DUPLICATE KEY UPDATE使えばいいじゃんって話になるのだが、
INSERT INTO users (id, name) VALUES(1,'taro'), (2, 'hanako') ON DUPLICATE KEY UPDATE name = VALUES(name);
IDが無かった場合はインサートされてしまうし、1つでもNOT NULL
なカラムがあると指定しないとコケるので向いていない。
ってときはELT&FIELD構文が一番便利
ELT&FIELD構文
以下の例はID1,2をそれぞれtaro,hanakoにする例。複数カラムをそれぞれ更新することもできる
UPDATE users SET name = ELT(FIELD(id, 1, 2), 'taro', 'hanako') WHERE ID IN (1, 2)