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

MySQLで一時テーブルを使わずにカラムの値を更新する方法【CASE文の活用】

MySQLで一時テーブルを作成することなく、カラムの値をまとめて更新したい場合があります。例えば、「Active」と「Inactive」というステータスを互いに入れ替えたいといったケースです。

このような場合に便利なのが CASE文 です。CASE文を使えば、一時テーブルに頼ることなく、単一のUPDATE文で条件に応じた値の更新を実現できます。

ここでは、実際のサンプルを使って具体的な手順を見ていきましょう。

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

まず、CREATE TABLE文でテーブルを作成します。

mysql> create table DemoTable
    -> (
    -> UserName varchar(100),
    -> UserStatus varchar(100)
    -> );
Query OK, 0 rows affected (0.74 sec)

「UserName」(ユーザー名)と「UserStatus」(ユーザーステータス)の2つのカラムを持つシンプルなテーブルです。

2. テストデータの挿入

次に、INSERTコマンドを使っていくつかのレコードを挿入します。

mysql> insert into DemoTable values('John','Active');
Query OK, 1 row affected (0.29 sec)

mysql> insert into DemoTable values('Chris','Inactive');
Query OK, 1 row affected (0.19 sec)

mysql> insert into DemoTable values('Bob','Inactive');
Query OK, 1 row affected (0.32 sec)

mysql> insert into DemoTable values('Robert','Active');
Query OK, 1 row affected (0.15 sec)

3. 現在のレコードを確認

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

mysql> select *from DemoTable;

出力結果

+----------+------------+
| UserName | UserStatus |
+----------+------------+
| John     | Active     |
| Chris    | Inactive   |
| Bob      | Inactive   |
| Robert   | Active     |
+----------+------------+
4 rows in set (0.00 sec)

この時点では、JohnとRobertが「Active」、ChrisとBobが「Inactive」になっています。

4. CASE文を使った更新クエリ

それでは、CASE文を使って「Active」と「Inactive」を一括で入れ替えるUPDATE文を実行します。

mysql> update DemoTable
    -> set UserStatus=CASE UserStatus WHEN 'Inactive' THEN 'Active' ELSE 'Inactive' END;
Query OK, 4 rows affected (0.28 sec)
Rows matched: 4 Changed: 4 Warnings: 0

このクエリの仕組みは以下の通りです。

  • UserStatusが「Inactive」の場合 → 「Active」に更新される
  • それ以外(つまり「Active」)の場合 → 「Inactive」に更新される

こうして、すべての行に対して条件分岐しながら値を反転させることができます。

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

もう一度SELECT文でテーブルの中身を確認しましょう。

mysql> select *from DemoTable;

出力結果

+----------+------------+
| UserName | UserStatus |
+----------+------------+
| John     | Inactive   |
| Chris    | Active     |
| Bob      | Active     |
| Robert   | Inactive   |
+----------+------------+
4 rows in set (0.00 sec)

ご覧の通り、JohnとRobertは「Inactive」に、ChrisとBobは「Active」に切り替わりました。一時テーブルを一切使わず、たった1つのUPDATE文だけで処理が完了しています。

まとめ

CASE文をUPDATE文と組み合わせれば、条件に応じた柔軟な一括更新が可能になります。特にステータスの反転や、複数の値への振り分けなど、条件分岐が必要な更新処理において非常に有効なテクニックです。ぜひ実際の開発でも活用してみてください。

  1. MySQLで特定のカラムのデータをエクスポートする方法(INTO OUTFILEの使い方)

    MySQLで特定のカラムのデータをエクスポートする方法 MySQLでテーブルから特定のカラム(列)のデータだけをファイルに書き出したい場合は、SELECT文とINTO OUTFILEを組み合わせるのが最もシンプルで確実な方法です。この記事では、実際にテーブルを作成し、データを投入したうえで、特定のカラムをテキストファイルへエクスポートする手順を順番に解説します。 基本構文 特定のカラムをファイルに出力する際の基本構文は次のとおりです。 select yourColumnName from yourTableName into outfile yourLocationOfFile; このように

  2. MySQLのdate()関数で日付を照合し、テーブルの列を更新する方法

    MySQLでは、date()関数とcurdate()関数を組み合わせることで、「日付部分だけ」を現在の日付と照合し、該当する行の列を更新できます。datetime型のカラムには時刻情報も含まれていますが、date()関数を使えば時刻を無視して日付のみを比較できるのがポイントです。基本構文date()関数で日付を照合しながら列を更新するための基本的な構文は以下の通りです。update yourTableName set yourColumnName=yourValue where date(yourColumnName)=curdate();サンプルテーブルの作成まず、動作確認用のテーブルを作成