MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLのCASE文を使って単一クエリで条件ごとに異なるIDを設定する方法

MySQLのCASE文で条件に応じたIDを一括更新する

MySQLでは、CASE文を活用することで、1つのUPDATEクエリだけで条件ごとに異なる値を設定できます。本記事では、名前(FirstName)の値に応じて各レコードのIdを別々の番号へ更新する手順を、サンプルコード付きでわかりやすく解説します。

サンプルテーブルの作成

まず、動作確認用のテーブルを作成しましょう。

mysql> create table DemoTable1545
    -> (
    -> Id int,
    -> FirstName varchar(20)
    -> );
Query OK, 0 rows affected (1.65 sec)

テストデータの挿入

insertコマンドを使って、テーブルにいくつかのレコードを追加します。

mysql> insert into DemoTable1545 values(1,'John');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable1545 values(2,'Chris');
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable1545 values(3,'Bob');
Query OK, 1 row affected (0.15 sec)

登録内容の確認

selectステートメントで、テーブル内の全レコードを表示します。

mysql> select * from DemoTable1545;

このクエリを実行すると、次のような出力が得られます。

+------+-----------+
| Id   | FirstName |
+------+-----------+
|    1 | John      |
|    2 | Chris     |
|    3 | Bob       |
+------+-----------+
3 rows in set (0.00 sec)

CASE文を使った条件付きUPDATEクエリ

ここが本題のポイントです。通常、条件ごとに異なる値を設定するには複数のUPDATE文が必要ですが、CASE文を組み合わせれば単一のクエリで完結できます。さらに「else Id」と記述しておくことで、どの条件にも一致しなかったレコードは元のIdのまま維持されます。

mysql> update DemoTable1545
    -> set Id=
    -> case when FirstName like '%John%' then 101
    -> when FirstName like '%Chris%' then 201
    -> when FirstName like '%Bob%' then 501
    -> else Id
    -> end;
Query OK, 3 rows affected (0.18 sec)
Rows matched: 3  Changed: 3 Warnings: 0

更新結果の確認

もう一度テーブルの内容を確認してみましょう。

mysql> select * from DemoTable1545;

実行結果は以下の通りです。

+------+-----------+
| Id   | FirstName |
+------+-----------+
|  101 | John      |
|  201 | Chris     |
|  501 | Bob       |
+------+-----------+
3 rows in set (0.00 sec)

このように、FirstNameの値に応じてJohnは101、Chrisは201、Bobは501へと、それぞれ異なるIDが正しく設定されました。CASE文を活用すれば、複数回のクエリ実行を避けて効率的に条件分岐のある更新処理が実現でき、パフォーマンス向上やコードの簡潔化にもつながります。

  1. MySQLでAND・OR演算子を組み合わせた単一クエリを使って特定のレコードを取得する方法

    MySQLでは、AND演算子とOR演算子をWHERE句で組み合わせることで、複数の条件を指定しながら特定のレコードを1つのクエリで取得できます。本記事では、実際にテーブルを作成し、データを挿入して、AND・ORを組み合わせたクエリの動作を確認していきます。 1. テーブルの作成 まず、CREATE TABLE文でサンプル用のテーブルを作成します。 mysql> create table DemoTable2015 -> ( -> StudentId int, -> StudentName varchar(20), -> Stude

  2. MySQLクエリで列名にエイリアス(別名)を設定する方法

    MySQLでは、SELECT文を使って列名に「エイリアス(別名)」を設定できます。エイリアスを利用すると、出力結果の見出しをわかりやすい名前に変更でき、レポート作成やアプリケーションでのデータ表示が格段に読みやすくなります。列名にエイリアスを設定する基本構文SELECT yourColumnName1 anyAliasName1, yourColumnName2 anyAliasName2FROM yourTableName anyAliasName;このように、列名の後にスペースを空けて任意の別名を記述するだけで、その列の表示名がエイリアスに置き換わります。テーブル名にも同様にエイリアスを設