MySQL CASE文でNULL判定

前回

MySQL SELECT時にCASE文で値をわかりやすく出力するサンプル 

でCASE文の話をしましたが、これでNULL判定するときは気を付けましょう。

サンプルは前回と同じく下記のようなデータですが、4番目の null だけ追加しています。下記のテーブルをcallsとします。

id | driver_id | created
1 | 13 | 2018-11-19 11:23:25
2 | 15 | 2018-11-19 11:25:30
3 | 16 | 2018-11-19 11:26:30
4 | null | 2018-11-19 11:26:30

このテーブルからnullでないドライバーIDの場合は、1、そうでない場合は0を返したい場合、いかにも、下記のように判定できそうですが

SELECT
   id, 
CASE
   driver_id WHEN NULL THEN 0 ELSE 1 
END
FROM
calls

なんとこれではダメです。全部、1が返ってきます。

NULL判定は、CASE文の中でしないといけないそうです。

SELECT 
    id, 
CASE 
    WHEN driver_id IS NULL THEN 0 ELSE 1 
END 
FROM 
calls 

これで、ちゃんと driver_id がNULLの時、0になります。

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です