お知らせ
2021年5月17日
[MYSQL] CASE文でNULL分岐に引っかかった話
<img alt="" class="alignnone size-medium wp-image-7772" height="100" src="https://www.earthlink.co.jp/manage/wp-content/uploads/2021/05/database-2394312_1920-300x100.jpg" width="300" /> 例として以下のようなデータが入っている「user」テーブルあるとします。
id | name |
---|---|
1 | Aさん |
2 | Bさん |
3 | Cさん |
4 | NULL |
case文でnameのデータがNULLの場合は×、それ以外の場合は○と表示するカラムを追加したいです。
私が引っかかった際のSQL文が以下になります。
SELECT *, CASE name WHEN NULL THEN '×' ELSE '○' END as '名前確認' FROM testdb.user
上記のSQL文を実行した場合、nameのデータがNULLの場合でも○と表示されてしまいます。
id | name | 名前確認 |
---|---|---|
1 | Aさん | ○ |
2 | Bさん | ○ |
3 | Cさん | ○ |
4 | NULL | ○ |
NULLかどうか判定するには「IS NULL」を使って書くのが正しいです
以下のSQLが正常に動いたものです。
SELECT *, CASE name IS NULL WHEN 1 THEN '×' ELSE '○' END as '名前確認' FROM testdb.user
IS NULLを使い、1(真)の場合は「×」とする事で正常に動きました。
id | name | 名前確認 |
---|---|---|
1 | Aさん | ○ |
2 | Bさん | ○ |
3 | Cさん | ○ |
4 | NULL | × |