トップページに戻る
次のSQLパズルへ
前のSQLパズルへ
10-175 少なくとも1つがnullかをチェック
SQLパズル
ValTable
ColA ColB ColC ColD ColE ColF ColG
---- ---- ---- ---- ---- ---- ----
1 1 1 1 1 1 1
1 1 1 1 null 1 1
1 2 1 1 1 1 1
1 null 1 null 1 null 1
null null null null null null null
ColA,ColB,ColC,ColD,ColE,ColF,ColG
の少なくとも1つがnullの行かをチェックし、
ExistsNull列に、その結果(ExistsもしくNotExists)を表示する。
出力結果
ColA ColB ColC ColD ColE ColF ColG ExistsNull
---- ---- ---- ---- ---- ---- ---- ----------
1 1 1 1 1 1 1 NotExists
1 1 1 1 null 1 1 Exists
1 2 1 1 1 1 1 NotExists
1 null 1 null 1 null 1 Exists
null null null null null null null Exists
データ作成スクリプト
create table ValTable(
ColA number(1),
ColB number(1),
ColC number(1),
ColD number(1),
ColE number(1),
ColF number(1),
ColG number(1));
insert into ValTable values( 1, 1, 1, 1, 1, 1, 1);
insert into ValTable values( 1, 1, 1, 1,null, 1, 1);
insert into ValTable values( 1, 2, 1, 1, 1, 1, 1);
insert into ValTable values( 1,null, 1,null, 1,null, 1);
insert into ValTable values(null,null,null,null,null,null,null);
commit;
SQL
col ColA for 99999
col ColB for 99999
col ColC for 99999
col ColD for 99999
col ColE for 99999
col ColF for 99999
col ColG for 99999
col ExistsNull for a15
--■■■greatest関数を使う方法■■■
select ColA,ColB,ColC,ColD,ColE,ColF,ColG,
case when greatest(ColA,ColB,ColC,ColD,ColE,ColF,ColG) is null
then 'Exists' else 'NotExists' end as ExistsNull
from ValTable;
--■■■Least関数を使う方法■■■
select ColA,ColB,ColC,ColD,ColE,ColF,ColG,
case when Least(ColA,ColB,ColC,ColD,ColE,ColF,ColG) is null
then 'Exists' else 'NotExists' end as ExistsNull
from ValTable;
--■■■orで論理和を求める方法■■■
select ColA,ColB,ColC,ColD,ColE,ColF,ColG,
case when ColA is null
or ColB is null
or ColC is null
or ColD is null
or ColE is null
or ColF is null
or ColG is null
then 'Exists' else 'NotExists' end as ExistsNull
from ValTable;
解説
greatest関数とLeast関数は、
引数に1つでもnullがあると、
nullを返すことを使ってます。
nullの有無判定で、全称命題と存在命題を考えると、
少なくとも1つがnullである。 ⇔ Least(ColA,ColB,・・・) is null
全てnullである。 ⇔ coalesce(ColA,ColB,・・・) is null
となります。
ColAとColBでデータ型が違う場合は、
Least関数を使わずに、orで論理和を求めるほうが無難でしょう。
(coalesce関数では、データ型が違うと、ORA-00932エラーとなります)
2-1-4 連続したnullチェック