Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

はじめに

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の分岐はコツがいる

ayies128
株式会社illustrious CTO。 EC業務を色々な角度から効率化できるように日々システム開発を行っています。 システム開発の話から飲みに行こうって話までなんでもどうぞ。 うどんとお酒と #UVERWorld が大好きです。 世界で売るためのECインフラサービス「lismoa」の開発運営を行なっています。 https://lismoa.com/
http://nabesys.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした