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句の指定を忘れると、該当する行以外全部吹っ飛ぶ。