on duplicate key update の変な使い方
例えば、こんなテーブルがあったとして、
CREATE TABLE hoge ( a INT NOT NULL AUTO_INCREMENT, b INT NOT NULL, PRIMARY KEY (a), UNIQUE KEY (b), )
こんなデータがすでに入ってるとき、
a | b |
1 | 10 |
2 | 20 |
3 | 30 |
4 | 40 |
: | : |
UPDATE hoge SET b = 12 WHERE b = 10; UPDATE hoge SET b = 25 WHERE b = 20; UPDATE hoge SET b = 38 WHERE b = 30;
みたいな更新を1クエリで実行したい。
で、スキーマをこう変えれば、
CREATE TABLE hoge ( a INT NOT NULL AUTO_INCREMENT, b INT NOT NULL, dummy INT NULL, -- 追加 PRIMARY KEY (a), UNIQUE KEY (b), )
SELECT FOR UPDATEしといて、
INSERT hoge (b, dummy) VALUES (10, 12), (20, 25), (30, 38) ON DUPLICATE KEY UPDATE b = VALUES(dummy)
みたいなクエリで更新できるんだけど、
スキーマを変えずになんとかできないのかなあ。
追記。
UPDATE ... CASE ...
で一応なんとかなるっぽい。