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

【MySQL】COALESCE関数を使ってNULLの場合に別のカラムの値を取得する方法

MySQLでは、あるカラム(フィールド)の値がNULLになっている場合に、代わりに別のカラムの値を取得したいケースがあります。このような場合にはCOALESCE()関数を使用すると便利です。COALESCE()は引数の中から最初に見つかったNULL以外の値を返す関数です。

サンプルテーブルの作成

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

mysql> create table DemoTable1336
   -> (
   -> FirstName varchar(20),
   -> SecondName varchar(20)
   -> );
Query OK, 0 rows affected (0.64 sec)

レコードの挿入

次に、insertコマンドを使ってテーブルにいくつかのレコードを挿入します。意図的にNULLを含むデータを登録しています。

mysql> insert into DemoTable1336 values('John',NULL);
Query OK, 1 row affected (0.21 sec)
mysql> insert into DemoTable1336 values(NULL,'Chris');
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable1336 values('David','Mike');
Query OK, 1 row affected (0.18 sec)

テーブル内の全レコードを確認

select文でテーブル内のすべてのレコードを表示してみましょう。

mysql> select * from DemoTable1336;

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

+-----------+------------+
| FirstName | SecondName |
+-----------+------------+
| John      | NULL       |
| NULL      | Chris      |
| David     | Mike       |
+-----------+------------+
3 rows in set (0.00 sec)

COALESCE()を使ってNULL以外の値を取得するクエリ

ここで本題です。あるカラムがNULLに設定されていても、もう一方のカラムの値を取得するには、以下のようにCOALESCE()を使用します。

mysql> select coalesce(FirstName,SecondName) as AlternateName from DemoTable1336;

このクエリでは、FirstNameがNULLでなければFirstNameの値を、NULLであればSecondNameの値を「AlternateName」として返します。

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

+---------------+
| AlternateName |
+---------------+
| John          |
| Chris         |
| David         |
+---------------+
3 rows in set (0.00 sec)

このように、FirstNameとSecondNameのどちらか一方がNULLでも、必ずNULL以外の名前が取得できていることがわかります。

補足:IFNULL()との違い

似たような処理を行う関数としてIFNULL()がありますが、IFNULL()は引数を2つしか取れないのに対し、COALESCE()は3つ以上の引数も指定できます。例えば、coalesce(FirstName, SecondName, ThirdName)のように記述すると、左から順に評価され、最初にNULL以外だった値が返されます。複数の候補カラムから優先順位をつけて値を取得したい場合には、COALESCE()の方が柔軟に対応できます。

  1. MySQLのSELECT文をカスタム変数に設定する方法

    この記事では、MySQLでSELECT文(クエリ)の結果をカスタム変数(ユーザー定義変数)に設定する方法を解説します。まずサンプル用のテーブルを作成してデータを挿入し、その後SET句と「@」から始まる変数を使ってクエリを変数に格納する手順を、実際の実行例とともに見ていきましょう。 1. テーブルを作成する 最初に、以下のコマンドでテーブルを作成します。 mysql> create table DemoTable2013     -> (     -> Name varchar(20)  

  2. MySQLでWHERE IN句とNULLを組み合わせてレコードを取得する方法

    MySQLでは、WHERE IN句を使った検索時にNULL値を含む行も取得したいケースがあります。しかし、NULLは通常の比較演算子では正しく評価されないため、IS NULLを組み合わせる必要があります。本記事では、その具体的な方法をサンプルコードとともに解説します。基本の構文NULLを含めて検索する場合の基本的な構文は以下のとおりです。ポイントは、IN句の条件に加えて OR カラム名 IS NULL を追加することです。SELECT yourColumnName1, yourColumnName2, yourColumnName3, ... N FROM yourTabl