【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()の方が柔軟に対応できます。
-
MySQLのSELECT文をカスタム変数に設定する方法
この記事では、MySQLでSELECT文(クエリ)の結果をカスタム変数(ユーザー定義変数)に設定する方法を解説します。まずサンプル用のテーブルを作成してデータを挿入し、その後SET句と「@」から始まる変数を使ってクエリを変数に格納する手順を、実際の実行例とともに見ていきましょう。 1. テーブルを作成する 最初に、以下のコマンドでテーブルを作成します。 mysql> create table DemoTable2013 -> ( -> Name varchar(20)  
-
MySQLでWHERE IN句とNULLを組み合わせてレコードを取得する方法
MySQLでは、WHERE IN句を使った検索時にNULL値を含む行も取得したいケースがあります。しかし、NULLは通常の比較演算子では正しく評価されないため、IS NULLを組み合わせる必要があります。本記事では、その具体的な方法をサンプルコードとともに解説します。基本の構文NULLを含めて検索する場合の基本的な構文は以下のとおりです。ポイントは、IN句の条件に加えて OR カラム名 IS NULL を追加することです。SELECT yourColumnName1, yourColumnName2, yourColumnName3, ... N FROM yourTabl