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

MySQLでNULLまたは0のフィールドだけを更新する方法【IF()関数の実例付き】

MySQLでは、IF()関数を使って条件を設定することで、フィールドがNULLまたは0の場合にのみ更新処理を行うことができます。本記事では、実際にテーブルを作成し、動作を確認しながら手順をわかりやすく解説します。

サンプルテーブルの作成

まず、更新対象となるテーブルを作成します。

mysql> create table DemoTable1592
    -> (
    -> StudentMarks int
    -> );
Query OK, 0 rows affected (0.76 sec)

テストデータの挿入

次に、INSERT文でレコードを挿入します。ここには、通常の数値に加えてNULLや0も含まれています。

mysql> insert into DemoTable1592 values(56);
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable1592 values(NULL);
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable1592 values(98);
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable1592 values(0);
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable1592 values(75);
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable1592 values(NULL);
Query OK, 1 row affected (0.11 sec)

挿入したデータの確認

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

mysql> select * from DemoTable1592;

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

+--------------+
| StudentMarks |
+--------------+
|           56 |
|         NULL |
|           98 |
|            0 |
|           75 |
|         NULL |
+--------------+
6 rows in set (0.00 sec)

NULLまたは0の場合のみ更新するクエリ

ここが本題です。以下のUPDATE文では、IF()関数を活用し、StudentMarksがNULLまたは0である場合にのみ値を33に更新しています。それ以外の値はそのまま維持されます。

mysql> update DemoTable1592 set StudentMarks=if(StudentMarks IS NULL or StudentMarks=0,33,StudentMarks);
Query OK, 3 rows affected (0.17 sec)
Rows matched: 6  Changed: 3 Warnings: 0

実行結果の「Changed: 3」から、NULLが2件・0が1件の計3行だけが更新され、残りの3行は変更されていないことがわかります。

更新後のデータ確認

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

mysql> select * from DemoTable1592;

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

+--------------+
| StudentMarks |
+--------------+
|           56 |
|           33 |
|           98 |
|           33 |
|           75 |
|           33 |
+--------------+
6 rows in set (0.00 sec)

NULLだった行と0だった行だけが33に更新され、56・98・75という既存の値はそのまま保持されているのが確認できます。

解説:IF()関数の仕組み

IF(条件, 真の場合の値, 偽の場合の値)という構文で動作します。今回のクエリでは、各引数が次のような役割を果たしています。

  • 条件StudentMarks IS NULL or StudentMarks=0 — フィールドがNULLまたは0かどうかを判定します
  • 真の場合の値33 — 条件を満たしていれば33に置き換えます
  • 偽の場合の値StudentMarks — 条件を満たさなければ元の値をそのまま返します

このように、WHERE句を使わなくてもIF()関数を活用すれば、特定の条件を満たす行だけを効率的に更新できます。なお、同様の処理はCASE式COALESCE()関数を組み合わせても実現可能ですので、用途に応じて使い分けるとよいでしょう。

  1. MySQLでCOALESCE()を使ってNULLのフィールドのみを更新する方法

    はじめに MySQLでは、NULLが含まれるレコードに対して、他のカラムの値を使って特定の1つのフィールドだけを更新したいケースがあります。そんなときに便利なのが COALESCE() 関数です。 COALESCE()は、引数の中から最初にNULLではない値を返す関数です。これをUPDATE文と組み合わせることで、NULLの場合だけ別のカラムの値で置き換えることができます。 サンプルテーブルの作成 まず、テーブルを作成しましょう。 mysql> create table DemoTable1805     (    &

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

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