タイトル通りのご指摘をいただきました。
「NATURAL JOIN」 については以前紹介しています。
「
SQLプロシジャで結合条件を省略する方法。」
というわけで試してみます。以下2つの例は3つのデータセットを「NATURAL JOIN」で結合しているプログラムです。
。。。FEEDBACKオプションでログにプログラムを展開してみると。。
例①
proc sql feedback;
create table OUT1 as
select * from
(select name from SASHELP.CLASS a where AGE=11)
natural full outer join
(select name from SASHELP.CLASS b where AGE=12)
natural full outer join
(select name from SASHELP.CLASS c where AGE=13)
;
quit;
ログ (環境・バージョンによって挙動が異なるかもしれません)
select COALESCE(C.Name, A.Name) as Name
from ( select A.Name
from SASHELP.CLASS A
where A.Age = 11
) full outer join
( select B.Name
from SASHELP.CLASS B
where B.Age = 12
) on B.Name = A.Name full outer join
( select C.Name
from SASHELP.CLASS C
where C.Age = 13
) on C.Name = A.Name;
|
例②
data DT1 DT2 DT3;
set SASHELP.CLASS;
run;
proc sql feedback;
create table OUT1 as
select * from
(select name from DT1 a where AGE=11)
natural full outer join
(select name from DT2 b where AGE=12)
natural full outer join
(select name from DT3 c where AGE=13)
;
quit;
ログ(環境・バージョンによって挙動が異なるかもしれません)
select COALESCE(C.Name, A.Name, B.Name) as Name
from ( select A.Name
from WORK.DT1 A
where A.Age = 11
) full outer join
( select B.Name
from WORK.DT2 B
where B.Age = 12
) on B.Name = A.Name full outer join
( select C.Name
from WORK.DT3 C
where C.Age = 13
) on (C.Name = A.Name) and (C.Name = B.Name);
|
2つの例は同じようなプログラムなのに、展開されるプログラムが異なっています。
(青字と赤字の部分)
マニュアルみても言及してないし、仕様なのかバグなのか不明です。何かご存知の方いたら教えてください。
てことで、「NATURAL JOIN」 で 3つ以上のデータセットを結合しない方がよさそうです。