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

MySQLでCASE文を使って条件に応じてテーブルの行の値を置き換える方法

MySQLで条件を設定して行の値を置き換えたい場合は、CASE文を使用します。CASE文を使うことで、UPDATE文の中で各レコードの値に応じて異なる値を柔軟に設定できます。

ここでは、実際にテーブルを作成し、データを挿入して、CASE文による置き換えの手順を順番に解説します。

1. テーブルの作成

まず、サンプル用のテーブルを作成します。

mysql> create table DemoTable1481
    -> (
    -> PlayerScore int
    -> );
Query OK, 0 rows affected (0.42 sec)

2. レコードの挿入

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

mysql> insert into DemoTable1481 values(454);
Query OK, 1 row affected (0.41 sec)
mysql> insert into DemoTable1481 values(765);
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable1481 values(890);
Query OK, 1 row affected (0.09 sec)

3. 挿入したデータの確認

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

mysql> select * from DemoTable1481;

実行すると、以下のような結果が出力されます。

+-------------+
| PlayerScore |
+-------------+
|         454 |
|         765 |
|         890 |
+-------------+
3 rows in set (0.00 sec)

4. CASE文で行の値を置き換える

次が本題となる、MySQLテーブルの行を条件に応じて置き換えるクエリです。UPDATE文とCASE文を組み合わせることで、既存の値ごとに新しい値を割り当てています。

mysql> update DemoTable1481
    -> set PlayerScore= case when PlayerScore=454 then 1256
    -> when PlayerScore=765 then 1865
    -> when PlayerScore=890 then 3990
    -> end
    -> ;
Query OK, 3 rows affected (0.17 sec)
Rows matched: 3  Changed: 3 Warnings: 0

このクエリでは、PlayerScoreの値が「454」なら「1256」に、「765」なら「1865」に、「890」なら「3990」にそれぞれ置き換えられます。

5. 更新結果の確認

もう一度SELECT文を実行して、テーブルのレコードが正しく更新されたか確認しましょう。

mysql> select * from DemoTable1481;

実行すると、以下のようにすべての値が置き換わっていることがわかります。

+-------------+
| PlayerScore |
+-------------+
|        1256 |
|        1865 |
|        3990 |
+-------------+
3 rows in set (0.00 sec)

まとめ

MySQLで条件に基づいて複数の行の値を一度に置き換えたい場合、UPDATE文とCASE文を組み合わせるのが効果的です。個別にUPDATE文を実行する必要がなく、1つのクエリで効率的に処理できるため、大量データの一括更新にも活用できます。なお、CASE文でどの条件にも一致しない値はNULLになる点に注意し、必要に応じてELSE句を追加すると安全です。

  1. MySQLでインデックス付きのテーブルを作成する方法を徹底解説

    MySQLでは、テーブル作成後にCREATE INDEX文を使うことで、特定のカラムに対してインデックスを追加できます。検索速度の向上やデータ整合性の確保において、インデックスは非常に重要な役割を果たします。この記事では、基本的な構文から実際の実行例まで、順を追ってわかりやすく解説します。インデックス付きテーブルを作成する基本構文まずテーブルを作成し、その後CREATE INDEX文でインデックスを追加します。基本の構文は以下のとおりです。create table yourTableName ( yourColumnName1 dataType, yourColumnName2 dataTyp

  2. MySQLでテーブル内の特定の行だけを削除する方法|NOT IN()を使った実践テクニック

    MySQLで特定の行以外を一括削除したい場合、NOT IN() 演算子を使用すると簡単に実現できます。NOT IN() は「指定した値のリストに含まれない行」を対象にできるため、残したい行のIDを列挙すれば、それ以外の行だけを効率よく削除できます。この記事では、サンプルテーブルを作成し、実際にデータを挿入してから、NOT IN() を使って特定の行のみを削除する手順を解説します。1. サンプルテーブルの作成まずは、StudentId を自動採番(AUTO_INCREMENT)に設定したテーブルを作成します。AUTO_INCREMENT=101 を指定することで、IDは101から順番に割り振られ