Skip to Main Content

Japanese

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

冗長なSQL記述の改善について

909529Jan 7 2012 — edited Jan 17 2012
以下の商品表および商品名変換表からSQL実行結果を得るためのSQLについて悩んでおり、質問させて頂きました。

・商品表
商品名 年産
A 2000
A 2002
Y 2002

・商品名変換表
商品名 新商品名
A X
B X

・取得したいSQL実行結果
商品名 年産 新商品名
A 2000 X
B 2000 X
X 2000 X
A 2002 X
B 2002 X
X 2002 X
Y 2002 Y
※ 商品名には商品表のレコードと商品名変換表で当該レコードと同一の新商品名をもつ商品名および新商品名を加える
  年産には商品表のレコードと商品名変換表で当該レコードと同一の新商品名をもつものに同様の年産を設定する
  新商品名には、商品表の商品が商品名変換表に存在する場合、商品名変換表の新商品名とする
  新商品名には、商品表の商品が商品名変換表に存在しない場合、新商品名は商品表の商品名とする

        
私が考えておりますSQLは以下の通りなのですが、記述が冗長であると感じております。もう少しスマートな記述法がありましたら教えて頂きたいと思っております。
分かり辛い説明だとは思いますが、何卒宜しくお願いします。

select coalesce(B.商品名,A.商品名) AS 商品名
,A.年産 AS 年産
,A.新商品名 AS 新商品名
from (select 商品表.商品名 AS 商品名
,商品表.年産 AS 年産
,coalesce(商品名変換表.新商品名, 商品表.商品名) AS 新商品名
from 商品表 left outer join 商品名変換表
on 商品表.商品名 = 商品名変換表.商品名 ) A
left outer join
(select 商品名変換表.新商品名 AS 新商品名
,商品名変換表.商品名 AS 商品名
from 商品名変換表
where 商品名変換表.新商品名 <> 商品名変換表.商品名
union all
select distinct
商品名変換表.新商品名 AS 新商品名
,商品名変換表.新商品名 AS 商品名
from 商品名変換表 ) B
on A.新商品名 = B.新商品名
Comments
Locked Post
New comments cannot be posted to this locked post.
Post Details
Locked on Feb 14 2012
Added on Jan 7 2012
1 comment
1,393 views