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

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

はじめに

MySQLでは、NULLが含まれるレコードに対して、他のカラムの値を使って特定の1つのフィールドだけを更新したいケースがあります。そんなときに便利なのが COALESCE() 関数です。

COALESCE()は、引数の中から最初にNULLではない値を返す関数です。これをUPDATE文と組み合わせることで、NULLの場合だけ別のカラムの値で置き換えることができます。

サンプルテーブルの作成

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

mysql> create table DemoTable1805
    (
    Name1 varchar(20),
    Name2 varchar(20)
    );
Query OK, 0 rows affected (0.00 sec)

レコードの挿入

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

mysql> insert into DemoTable1805 values('Chris',NULL);
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1805 values('David','Mike');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1805 values(NULL,'Mike');
Query OK, 1 row affected (0.00 sec)

テーブルの内容を確認

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

mysql> select * from DemoTable1805;

出力結果は以下の通りです。

+-------+-------+
| Name1 | Name2 |
+-------+-------+
| Chris | NULL  |
| David | Mike  |
| NULL  | Mike  |
+-------+-------+
3 rows in set (0.00 sec)

この時点で、Name1がNULLになっているレコードが1件あることがわかります。

1つのフィールドのみを更新するクエリ

Name1がNULLの場合に、Name2の値で埋めるUPDATEクエリは以下の通りです。

mysql> update DemoTable1805
    set Name1 = coalesce(Name1,Name2);
Query OK, 1 row affected (0.00 sec)
Rows matched: 3  Changed: 1 Warnings: 0

ポイント解説

coalesce(Name1, Name2) は、Name1がNULLでなければName1の値をそのまま返し、Name1がNULLの場合のみName2の値を返します。そのため、実行結果の「Changed: 1」が示すように、実際に変更されたのはName1がNULLだった1行だけで、それ以外の行には一切影響がありません。

更新後の確認

もう一度テーブルのレコードを確認してみましょう。

mysql> select * from DemoTable1805;

出力結果は以下の通りです。

+-------+-------+
| Name1 | Name2 |
+-------+-------+
| Chris | NULL  |
| David | Mike  |
| Mike  | Mike  |
+-------+-------+
3 rows in set (0.00 sec)

3行目のName1が「NULL」から「Mike」に置き換えられました。一方、Name2がNULLである1行目は元のまま維持されています。

まとめ

COALESCE()を活用すれば、NULL以外の値を持つ行には影響を与えず、NULLのフィールドだけを別のカラムの値で効率的に更新できます。なお、同様の処理はIFNULL()やCASE式でも実現可能ですが、シンプルなNULL処理であればCOALESCE()が最も簡潔で読みやすい選択肢と言えるでしょう。

  1. MySQLのUPDATE文で1つのクエリを使って複数のレコードを更新する方法

    MySQLでは、UPDATEステートメントを使うことで、1つのクエリで複数のカラムや複数のレコードの値をまとめて更新できます。この記事では、実際にサンプルテーブルを作成し、UPDATE文でデータを更新する具体的な手順を解説します。サンプルテーブルの作成まず、テーブルを作成しましょう。mysql> create table DemoTable     -> (     -> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,    &

  2. MySQLの1つのUPDATE文で2つの列を同時に更新する方法

    はじめにMySQLでは、1つのUPDATE文の中でSET句を一度だけ使えば、複数の列を同時に更新できます。各列の指定はカンマ(,)で区切って記述します。この記事では、実際にテーブルを作成し、1つのクエリで2つの列(FirstNameとLastName)を更新する手順を解説します。サンプルテーブルの作成まず、以下のようにCREATE TABLE文でテーブルを作成します。mysql> create table DemoTable1909 ( Id int NOT NULL, FirstName varchar(20), LastName varchar(20)