MySQLのCASE式とUPDATE文を使って特定の列の値を条件付きで更新する方法
特定の列の値をCASE式(CASEステートメント)の条件に基づいて更新したい場合は、UPDATEコマンドとCASE式を組み合わせることで実現できます。この記事では、学生の点数データを例に、テーブルの作成から値の入れ替えまでの手順をわかりやすく解説します。
1. サンプルテーブルの作成
まず、デモ用のテーブルを作成します。
mysql> create table DemoTable1925
(
StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
StudentName varchar(20),
StudentMarks int
);
Query OK, 0 rows affected (0.00 sec)
2. レコードの挿入
INSERTコマンドを使用して、テーブルにレコードを追加します。
mysql> insert into DemoTable1925(StudentName,StudentMarks) values('Chris',98);
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1925(StudentName,StudentMarks) values('David',45);
Query OK, 1 row affected (0.00 sec)
3. 挿入したデータの確認
SELECT文ですべてのレコードを表示して、現在の状態を確認しましょう。
mysql> select * from DemoTable1925;
実行すると、次のような出力が得られます。
+-----------+-------------+--------------+ | StudentId | StudentName | StudentMarks | +-----------+-------------+--------------+ | 1 | Chris | 98 | | 2 | David | 45 | +-----------+-------------+--------------+ 2 rows in set (0.00 sec)
4. CASE式を使ったUPDATE文の実行
ここがポイントです。以下のクエリでは、CASE式を使って「StudentMarks」列の値を条件に応じて入れ替えています。具体的には、点数が45の場合は98に、98の場合は0に更新されます。
mysql> update DemoTable1925
set StudentMarks=case StudentMarks when 45 then 98
when 98 then 0 end
where StudentMarks IN(45,98);
Query OK, 2 rows affected (0.00 sec)
Rows matched: 2 Changed: 2 Warnings: 0
WHERE句でIN(45,98)を指定している点が重要です。これにより、対象となる値以外のレコードが誤って更新されることを防ぎ、CASE式で定義されていない値がNULLになってしまうリスクも回避できます。
5. 更新結果の確認
もう一度テーブルの内容を確認してみましょう。
mysql> select * from DemoTable1925;
実行すると、次のように値が正しく入れ替わっていることがわかります。
+-----------+-------------+--------------+ | StudentId | StudentName | StudentMarks | +-----------+-------------+--------------+ | 1 | Chris | 0 | | 2 | David | 98 | +-----------+-------------+--------------+ 2 rows in set (0.00 sec)
まとめ
CASE式をUPDATE文のSET句内で使うことで、1つのクエリだけで複数の条件に応じた値の更新(値の入れ替えなど)を効率的に行えます。WHERE句で対象レコードを絞り込むことで、意図しないデータの更新を防ぎつつ、柔軟な一括更新が可能になります。
-
MySQLで特定のカラム名を持つテーブルを検索する方法
MySQLで特定のカラム名(列名)を持つテーブルを探したい場合は、システムビューである information_schema.columns を利用します。このビューにはデータベース内のすべてのテーブルとカラムの情報が格納されているため、条件を指定して検索するだけで、目的のカラムを持つテーブルを簡単に特定できます。 基本構文 カラム名からテーブル名を検索する際の基本的な構文は以下の通りです。 select distinct table_name from information_schema.columns where column_name like %yourSearchValue% a
-
MySQLのLIKEクエリで「%」を含む列値を検索する方法【エスケープ処理の基本】
MySQLのLIKEクエリで「%」を含む値を検索するには?MySQLでは、「%」はLIKE句におけるワイルドカードとして機能するため、そのまま検索することはできません。「%」という文字そのものを含む列値を検索したい場合は、バックスラッシュ(\)によるエスケープ処理が必要です。基本構文「%」を含む列値を検索する場合の構文は以下の通りです。select * from yourTableNamewhere yourColumnName LIKE \%%;ポイントは、検索対象の「%」の直前に「\(バックスラッシュ)」を付けることです。これにより、ワイルドカードではなく通常の文字として扱われます。実際に