お知らせ
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 | × |