【MySQL】カラムがNULL値を取りうるときの検索条件の書き方
最近MySQLを扱う業務をやってみたら、がぜん興味が出てきて、この機会にちゃんと勉強しようと思い立った。
今回は業務で少しはまった、空文字を絞込でうまくはじく書き方について。
空文字をはじきたい
例えば、コンバージョンポイントと会員IDというカラムがあって、両方CHARやVARCHAR型を取る。そして会員IDはnull値も取りうるとする。
このとき、会員IDがある行だけを絞込みたくて、こんな感じのクエリを書いてしまった。
SELECT cv_point, user_id FROM table WHERE user_id IS NOT NULL;
これだとnull値しか弾かれず、空文字は弾かれない。null値と空文字は違う。
正しくはこう。
SELECT cv_point, user_id FROM table WHERE user_id != '';
これで空文字が弾かれる。ちなみにnull値が許可されているカラムでも、この書き方でnull値も弾くことができる。
特定の値以外に絞り込みたい
例えば、会員IDがaaaでない行に絞りたいとき。
SELECT cv_point, user_id FROM table WHERE user_id != 'aaa';
これで良いときが大半だが、もし会員IDのカラムがnull値を許可している場合、これだとnull値が入ってこない。
そのときはこう書く。
SELECT cv_point, user_id FROM table WHERE user_id != 'aaa' OR user_id IS NULL;
初めてのテーブルでは、null値を許可しているかなどをチェックしてから触るようにしよう。