LoginSignup
26
12

More than 5 years have passed since last update.

MySQL CASE文でNULLの分岐はコツがいる

Last updated at Posted at 2019-03-14

はじめに

CASE文でNULLの分岐は単純にはできません。
ほんとだよ!

例としてusersというテーブルがあって、
その中に名前(name)と体重(weight)のフィールドがあるとします。

id name weight
1 Aさん 50
2 Bさん 60
3 Cさん 70
4 Dさん 80
5 Eさん NULL

やりたいこと

こんなことする機会があるかどうかはおいといて!
体重を測っている人の名前の後ろに(計測済)、測っていない人の名前の後ろに(未計測)とつけたい
つまりこうしたい。

id name weight
1 Aさん(計測済) 50
2 Bさん(計測済) 60
3 Cさん(計測済) 70
4 Dさん(計測済) 80
5 Eさん(未計測) NULL

やりがちなこと

何も知らずにSQLを書いたらこうなると思います。(俺はこう書いた)

UPDATE users
SET name = 
   CONCAT(name,
          CASE weight WHEN NULL THEN "(未計測)" ELSE "(計測済)" END
         );

しかしこれだと結果が

id name weight
1 Aさん(計測済) 50
2 Bさん(計測済) 60
3 Cさん(計測済) 70
4 Dさん(計測済) 80
5 Eさん(計測済) NULL

となってしまいます。

CASE xxx WHEN NULLでNULLの分岐はできないんですねえ...

解決方法

こうするとNULLで分岐ができます。

UPDATE users
SET name = 
   CONCAT(name,
          CASE weight IS NULL WHEN 1 THEN "(未計測)" ELSE "(計測済)" END
         );

これはほんの一例なので他にも方法はあります。

終わりに

ということでCASE文でNULLの分岐はコツがいるという話でした。

ブログで見たい方はこちら
MySQL CASE文でNULLの分岐はコツがいる

26
12
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
26
12