【SQL】サブクエリ(副問合せ)がNULLを含んでいた場合
はじめに
NOT INまたは<>ALLで判定するサブクエリ(副問合せ)の結果にNULLが含まれると、全体の結果もNULLとなります。
データにNULLが含まれると、取得されるはずのデータが取得できなくなることがあるので、サブクエリの結果からNULLを除外する方法を調べてみました。
サブクエリの結果からNULLを除外する方法は2つ
1. サブクエリの絞り込み条件に、IS NOT NULL条件を含める
2. COALESCE関数を使ってNULLを別の値に置き換える
上記それぞれの方法を使って、サブクエリの結果からNULLを除外します
1. サブクエリの絞り込み条件に、IS NOT NULL条件を含める
SELECT * FROM 家計簿 WHERE 費用 IN ( SELECT 費用 FROM 家計簿 WHERE 費用 IS NOT NULL )
=> NULLを除外する条件を付与
2. COALESCE関数を使ってNULLを別の値に置き換える
SELECT * FROM 家計簿アーカイブ WHERE 費用 IN ( SELECT COALESCE( 費用, '不明’) FROM 家計簿 )
=> 費用がNULLなら代わりに'不明'にする
まとめ
データにNULLが含まれていたことが原因で、取得できるはずのデータが取得できないケースは、原因がわかりにくいので、サブクエリの結果から確実にNULLを除外するよう注意が必要だと思います。
参考
スッキリわかるSQL入門 第2版
中山清喬 (著), 飯田理恵子 (著), 株式会社フレアリンク (監修)