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 ...
で一応なんとかなるっぽい。