タイトル通りのご指摘をいただきました。
「NATURAL JOIN」 については以前紹介しています。
「SQLプロシジャで結合条件を省略する方法。」
というわけで試してみます。以下2つの例は3つのデータセットを「NATURAL JOIN」で結合しているプログラムです。
。。。FEEDBACKオプションでログにプログラムを展開してみると。。
例①
proc sql feedback;
create table OUT1 asselect * 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つ以上のデータセットを結合しない方がよさそうです。
0 件のコメント:
コメントを投稿