はじめに
前の2記事の知識をベースとして、本記事は具体例を述べています。
気になった方、前提知識がない方は下記の記事をご覧ください。
実行結果はこちらで確認できます。
CASE式でNULLを用いる際の注意点
スキーマの定義は以下とします。
Schema (MySQL v5.7)
CREATE TABLE companies (
id INT NOT NULL PRIMARY KEY auto_increment,
company_name TEXT,
company_group_id INT,
address TEXT
);
INSERT INTO companies VALUES
(1, 'ACE', 1, 'Japan Tokyo chiyoda 1-1'),
(2, 'ACE_1', 1, 'Japan Tokyo chiyoda 1-1'),
(3, 'ACE_2', NULL, 'Japan Tokyo chiyoda 1-2'),
(4, 'RAINBOW_MEAL', 2, 'Japan Tokyo koukyogaien 1-1'),
(5, 'STEP_INDUSTRY', 3, 'Japan Osaka fuchu midorigaoka 1-1');
クエリにて、company_group_id から グループ名を命名したいとき CASE式を用いる際の注意点です。
Query
SELECT
company_name,
CASE
WHEN company_group_id = 1 THEN ' ACE_group'
WHEN company_group_id = NULL THEN 'unknown'
ELSE 'other'
END AS group_name
FROM companies
company_name | group_name |
---|---|
ACE | ACE_group |
ACE_1 | ACE_group |
ACE_2 | other |
RAINBOW_MEAL | other |
STEP_INDUSTRY | other |
ACE_2
は NULLなので、unknown
となって欲しいところですが、other
となりました。
なぜおかしいかは、こちらの記事に詳細書いてます。
ACE_2
は NULLなので、unknown
となってくれるクエリは
SELECT
company_name,
CASE
WHEN company_group_id = 1 THEN ' ACE_group'
WHEN company_group_id IS NULL THEN 'unknown'
ELSE 'other'
END AS group_name
FROM companies
ですね。
company_name | group_name |
---|---|
ACE | ACE_group |
ACE_1 | ACE_group |
ACE_2 | unknown |
RAINBOW_MEAL | other |
STEP_INDUSTRY | other |
ACE_2
のgroup_name
がunknown
となってくれました。
大事なのは、NULLは値ではないということを理解しているかです。
今回は以上です!
参照
68p