MySQLでテーブルのカラムのNULLと空文字を同等に扱いたい場合の書き方
NULL許可しているカラムに空文字列が設定されており、
作成したSQLがうまく動いてなかったのでゴニョゴニョやってたけど、
ちょっと調べてみたらいい感じのやつ見つけたので忘れないよう残しておきます。
IFNULL(引数1,引数2) と NULLIF(引数1,引数2) という関数がありました。
IFNULLについては、引数1がNULLだった場合、引数2の内容を返す仕様となっています。
SELECT
IFNULL('hoge', 'hoge hoge') hoge,
IFNULL('', 'hoge hoge') 空文字列,
IFNULL(NULL, 'hoge hoge') NULL;
実行すると以下結果となります。
+------+--------------+-----------+
| hoge | 空文字列 | NULL |
+------+--------------+-----------+
| hoge | | hoge hoge |
+------+--------------+-----------+
NULLIFの場合、引数1と引数2が一致した場合、NULLが帰ってきます。
select
NULLIF('hoge', '') hoge,
NULLIF('hoge', 'hoge') hogehoge,
NULLIF('hoge', NULL) hogeN,
NULLIF('', NULL) N;
を実行すると以下結果となります。
+---------+----------+----------+------+
| hoge | hogehoge | hogeN | N |
+---------+----------+----------+------+
| hoge | NULL | hoge | |
+---------+----------+----------+------+
ということで、 NULLIF(対象のカラム,'') IS NULL
と書くことで空文字列、NULLのレコードを抽出できるようになります。