UPDATE文を1行ずつチマチマ更新していくのはめんどくさいなぁ、と。
テーブル名:hoehoe_tbl
id | name | create_date | birth |
---|---|---|---|
1 | うらら | 2014-03-19 00:00:00 | 2000-01-01 |
2 | プリン | 2014-03-19 02:13:24 | 2000-01-01 |
3 | ジャガー | 2014-03-19 03:02:11 | 2000-01-01 |
4 | マイケル | 2014-03-19 06:00:21 | 1958-08-29 |
こんなだったとして。
「マイケル」以外の誕生日がめちゃくちゃじゃないの!という時は
update `hoehoe_tbl` SET `birth` = '2477-05-30' WHERE `id` = 1 update `hoehoe_tbl` SET `birth` = '2477-11-11' WHERE `id` = 2 update `hoehoe_tbl` SET `birth` = '2464-07-06' WHERE `id` = 3
とかやっていた訳ですが。
(プリンとジャガーの誕生日知りません。デタラメです。)
CASEステートメントを使ってこうもできるらしい。
update `hoehoe_tbl` SET `birth` = case `id` WHEN 1 THEN '2477-05-30' WHEN 2 THEN '2477-11-11' WHEN 3 THEN '2464-07-06' END WHERE `id` IN (1,2,3);
これで、SQL文がひとつにまとまって便利。
複数カラムを同時に更新するときは、UPDATE文の書き方そのままに
update `hoehoe_tbl` SET `name` = case `id` WHEN 1 THEN 'URARA' WHEN 2 THEN 'PUDDING' WHEN 3 THEN 'JAGUAR' END , `birth` = case `id` WHEN 1 THEN '2477-05-30' WHEN 2 THEN '2477-11-11' WHEN 3 THEN '2464-07-06' END , `create_date` = NOW() WHERE `id` IN (1,2,3);
こんな?
UPDATE文なので、最後のWHERE句の指定を忘れると、該当する行以外全部吹っ飛ぶ。