CASE文を使った複数レコードのUpdate方法
CASE文を使って、複数レコードを1クエリーでアップデートする方法を共有させて頂きます。
CASE文というのは、「○○の場合は、△△に」のように、条件によって異なる動作をさせることが出来ます。
先程から利用しているテーブルにて、男の子は「くん」、おんなの子は「ちゃん」を追加する良うなクエリーをCASE文を使って書いてみます。このクエリーではCASE文を使って「NAMEが○○のとき」は「○○に」という記述にしております。だったらGENDERっていうカラムも用意しておけよ
mysql> UPDATE table01 SET NAME= -> CASE -> WHEN NAME='かつお' THEN 'かつおくん' -> WHEN NAME='わかめ' THEN 'わかめちゃん' -> WHEN NAME='たらお' THEN 'たらおくん' -> END -> ; Query OK, 3 rows affected (0.00 sec) Rows matched: 3 Changed: 3 Warnings: 0
1クエリーで更新されたテーブル内容を確認してみましょう。
mysql> select * from table01; +----+--------------------+------+---------------------+ | ID | NAME | AGE | UPDATE_TIME | +----+--------------------+------+---------------------+ | 1 | かつおくん | 12 | 2014-05-18 13:42:20 | | 2 | わかめちゃん | 10 | 2014-05-18 13:42:20 | | 3 | たらおくん | 4 | 2014-05-18 13:42:20 | +----+--------------------+------+---------------------+ 3 rows in set (0.00 sec) mysql>
NAMEに「くん」や「ちゃん」が追加され、「UDATE_TIME」を見ると、全てが同時に更新されていることがわかると思います。
「“NAMEを○○AGEを○○に”のように、複数カラムを更新したい場合はどうしたらいいのですか?」という疑問が出てくると思います、その場合は、「UPDATE set NAME = CASE文, AGE = CASE文」と”カンマ”で区切って指定をするように指定をすれば問題ありません。
IDを判定基準として、CASE文を使ったUpdateクエリーを実行してみましょう。
mysql> UPDATE table01 SET NAME= -> CASE -> WHEN ID=1 THEN 'かつお' -> WHEN ID=2 THEN 'わかめ' -> WHEN ID=3 THEN 'たらお' -> END, -> AGE= -> CASE -> WHEN ID=1 THEN 14 -> WHEN ID=2 THEN 20 -> WHEN ID=3 THEN 6 -> END -> ; Query OK, 3 rows affected (0.00 sec) Rows matched: 3 Changed: 3 Warnings: 0 mysql> select * from table01; +----+-----------+------+---------------------+ | ID | NAME | AGE | UPDATE_TIME | +----+-----------+------+---------------------+ | 1 | かつお | 14 | 2014-05-18 14:25:17 | | 2 | わかめ | 20 | 2014-05-18 14:25:17 | | 3 | たらお | 6 | 2014-05-18 14:25:17 | +----+-----------+------+---------------------+ 3 rows in set (0.00 sec) mysql>
ここまでが、CASE文を使って複数レコードを1クエリーでUpdateする方法になります。
次のページ:INSERT … ON DUPLICATE KEY UPDATEを使ったUpdate方法、UpdateとInsertを同時に!?
コメント