[MySQL]1クエリーで複数レコードのUpdate、さらにはUpdateとInsertを同時にやってしまおう。むっはっはの巻

スポンサーリンク

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を同時に!?

コメント

タイトルとURLをコピーしました