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

MySQLで複数のUPDATE文を1つにまとめる方法(CASE式の活用)

MySQLでは、CASE式を使うことで、条件ごとに異なる値へ更新する複数のUPDATE文を、たった1つのUPDATE文にまとめることができます。ここでは、実際にテーブルを作成し、CASE式による一括更新の手順を解説します。

1. サンプルテーブルの作成

まず、以下のコマンドでテーブルを作成します。

mysql> create table DemoTable
    (
    Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    Name varchar(20)
    );
Query OK, 0 rows affected (1.11 sec)

2. レコードの挿入

INSERTコマンドを使って、テーブルにレコードを挿入します。

mysql> insert into DemoTable(Name) values('John');
Query OK, 1 row affected (0.23 sec)
mysql> insert into DemoTable(Name) values('Carol');
Query OK, 1 row affected (0.20 sec)
mysql> insert into DemoTable(Name) values('David');
Query OK, 1 row affected (0.13 sec)

3. 挿入したレコードの確認

SELECT文ですべてのレコードを表示してみましょう。

mysql> select * from DemoTable;

実行すると、次のような結果が得られます。

+----+-------+
| Id | Name  |
+----+-------+
| 1  | John  |
| 2  | Carol |
| 3  | David |
+----+-------+
3 rows in set (0.00 sec)

4. CASE式を使ってUPDATE文をまとめる

以下が、複数のUPDATE処理を1つのクエリにまとめた例です。WHERE句で対象の名前を限定している点にも注目してください。

mysql> UPDATE DemoTable set Name= case when Name= 'John' then 'John Smith'
when Name= 'Carol' then 'Carol Taylor'
when Name= 'David' then 'David Miller'
end
where Name IN('John','Carol','David');
Query OK, 3 rows affected (0.12 sec)
Rows matched: 3 Changed: 3 Warnings: 0

5. 更新後のレコードを確認

更新後のデータをSELECT文で確認します。

mysql> select * from DemoTable;

実行すると、次のようにすべての名前が一括で更新されていることがわかります。

+----+--------------+
| Id | Name         |
+----+--------------+
| 1  | John Smith   |
| 2  | Carol Taylor |
| 3  | David Miller |
+----+--------------+
3 rows in set (0.00 sec)

ポイント解説

  • CASE式:各条件(WHEN〜THEN)に一致する行に対して、それぞれ異なる値を設定できます。
  • WHERE句:更新対象の行を限定することで、意図しない行がNULLに更新されるのを防ぎます。WHERE句を省略すると、条件に一致しない行はNULLになってしまうため注意が必要です。
  • パフォーマンス:個別にUPDATE文を実行するよりも、1回のクエリで済むため、大量データの更新時に効率的です。
  1. JavaのPreparedStatementを使ってMySQLテーブルを更新する方法

    JavaからMySQLのテーブルを更新するには、PreparedStatementを使用するのが一般的で安全な方法です。PreparedStatementを使うことで、SQLインジェクションを防ぎつつ、パラメータを動的に設定できます。この記事では、実際にテーブルを作成し、Javaプログラムからレコードを更新するまでの一連の手順を解説します。1. テーブルの作成まず、MySQLで更新用のテーブルを作成しましょう。mysql> create table DemoTable( Id int, FirstName varchar(40) ); Query OK, 0 rows a

  2. MySQLでGROUP BYのように特定の1行だけ更新する方法|ORDER BYとLIMITを活用したUPDATE文の書き方

    MySQLでは、UPDATE文の中でGROUP BYを直接使用することができません。しかし、「同じ値を持つ複数のレコードの中から、最初の1行だけを更新したい」というケースは実際の開発でよく発生します。 そんなときに役立つのが、ORDER BYとLIMITを組み合わせたUPDATE文です。この記事では、サンプルテーブルを使いながら、その具体的な手順をわかりやすく解説します。 1. サンプルテーブルを作成する まず、従業員情報を格納するテーブル「DemoTable2018」を作成します。テーブルには、自動採番される主キー「EmployeeId」、従業員名「EmployeeName」、給与「Emp