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

MySQLでCASE WHENを使って列内の2つの値を交換・更新する方法

MySQLである列内の2つの値を入れ替え(スワップ)したい場合、CASE WHEN文を使えば一度のUPDATE文で簡単に実現できます。ここでは、サンプルテーブルを作成しながら、実際に値を交換する手順を解説します。

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

まず、テーブルを作成します。

mysql> create table DemoTable1382
    -> (
    -> StudentName varchar(20)
    -> );
Query OK, 0 rows affected (0.57 sec)

2. レコードの挿入

INSERTコマンドでいくつかのレコードを挿入します。

mysql> insert into DemoTable1382 values('John');
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable1382 values('Chris');
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable1382 values('Adam');
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable1382 values('Bob');
Query OK, 1 row affected (0.17 sec)

3. レコードの確認

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

mysql> select * from DemoTable1382;

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

+-------------+
| StudentName |
+-------------+
| John        |
| Chris       |
| Adam        |
| Bob         |
+-------------+
4 rows in set (0.00 sec)

4. CASE WHENで値を交換するUPDATE文

次のクエリを実行すると、「John」と「Chris」の値が入れ替わります。

mysql> update DemoTable1382
    ->  set StudentName=( case when StudentName="Chris" then "John"
    -> when StudentName="John" then "Chris"
    -> else
    -> StudentName
    -> end
    -> );
Query OK, 2 rows affected (0.19 sec)
Rows matched: 4  Changed: 2 Warnings: 0

このUPDATE文のポイントは、CASE WHENの中で「ChrisならJohnへ、JohnならChrisへ変更し、それ以外は元の値をそのまま返す」という処理を一括して行っている点です。2回に分けて更新すると、先の更新結果によって後の更新が意図しない動作になる恐れがありますが、この方法ならその問題を回避できます。

5. 更新結果の確認

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

mysql> select * from DemoTable1382;

実行結果:

+-------------+
| StudentName |
+-------------+
| Chris       |
| John        |
| Adam        |
| Bob         |
+-------------+
4 rows in set (0.00 sec)

「John」が「Chris」に、「Chris」が「John」に入れ替わり、それ以外のレコード(Adam、Bob)には影響がないことがわかります。

まとめ

MySQLで列内の2つの値を交換するには、UPDATE文とCASE WHENを組み合わせるのが最もシンプルで安全な方法です。1回のUPDATEで完結するため、データの整合性を保ちながら確実に値を入れ替えることができます。

  1. MySQLテーブルのストレージエンジンを変更する方法

    MySQLでは、ALTER TABLE文を使うことで、既存テーブルのストレージエンジンを簡単に変更できます。例えば、MyISAMで作成したテーブルをInnoDBに切り替えたい場合などに役立ちます。 基本構文 alter table yourTableName ENGINE=InnoDB; yourTableName の部分に対象となるテーブル名を指定し、ENGINE= の後ろに設定したいストレージエンジン名を記述します。 サンプルテーブルの作成 まず、MyISAMエンジンを使用したテーブルを作成してみましょう。 mysql> create table DemoTable  &n

  2. MySQLテーブルを一括更新する方法|ADDTIME関数で複数行の時刻データをまとめて変更

    MySQLでは、UPDATE文と関数を組み合わせることで、テーブル内の複数のレコードを一度に一括更新(バッチ更新)できます。本記事では、時刻型(TIME型)のカラムに対してADDTIME関数を使い、すべての行の時刻をまとめて加算・更新する手順を、実際のSQL文と実行結果付きでわかりやすく解説します。1. サンプルテーブルを作成するまず、時刻データを格納するためのテーブル「DemoTable」を作成します。mysql> create table DemoTable    -> (    -> Bre