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()が最も簡潔で読みやすい選択肢と言えるでしょう。
-
MySQLのUPDATE文で1つのクエリを使って複数のレコードを更新する方法
MySQLでは、UPDATEステートメントを使うことで、1つのクエリで複数のカラムや複数のレコードの値をまとめて更新できます。この記事では、実際にサンプルテーブルを作成し、UPDATE文でデータを更新する具体的な手順を解説します。サンプルテーブルの作成まず、テーブルを作成しましょう。mysql> create table DemoTable -> ( -> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY, &
-
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)