• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:SQLで取得可能でしょうか)

SQLでテーブルのデータを取得する方法

このQ&Aのポイント
  • SQLを使用して、2つのテーブルからデータを取得する方法を教えてください。テーブル1のキーに対応するテーブル2の名称も取得したいです。
  • テーブル1のキーとテーブル2の名称を関連付けて取得する方法をSQLで実現したいです。1つのキーに対して1つのデータを取得するので、名称は特定文字で区切って取得したいです。
  • 1回のSQL発行でテーブル1のキーとテーブル2の名称を取得する方法を教えてください。テーブル1のキーは重複しないため、一意のデータを取得することができます。

質問者が選んだベストアンサー

  • ベストアンサー
  • yamada_g
  • ベストアンサー率68% (258/374)
回答No.1

oracleのバージョンが書いていないので使えるか分かりませんが。 階層問合せを無理やり使ってみました。 with t1 as ( select 1 key,'テスト1' 項目 from dual union all select 2,'テスト2' from dual union all select 3,'テスト3' from dual ) ,t2 as ( select 1 CD, 'か' 名称 from dual union all select 1,'き' from dual union all select 2,'さ' from dual union all select 2,'し' from dual union all select 2,'す' from dual union all select 3,'た' from dual ) select  t1.key, t2.名称 from  t1  inner join  (select   cd, substr(名称,2) 名称, lev,   --最下層を取得するためのCD毎の最大のLEVEL   max(lev) over(partition by CD) max_level  from   (select    cd, sys_connect_by_path(名称,'/') 名称, level lev   from    (select     t2.*,     --階層問合せをするためにコード毎に順序付け     row_number() over(partition by CD order by 名称) recnum from t2)   start with recnum = 1   connect by prior cd = cd       and prior recnum = recnum - 1)) t2  on t1.key = t2.cd  and t2.lev = t2.max_level; oracle10.2.0.1.0では期待結果が取得できました。

evaag777
質問者

お礼

お礼が遅くなりました。 取得を確認できました。 ご回答どうもありがとうございました。

その他の回答 (1)

回答No.2

#手元で実験できないのでてきとーなことを言っているかもしれないので参考程度に。 CONNECT BY と SYS_CONNECT_BY_PATH() を組み合わせればちょこちょこっとできませんかね? KEYの値が同一だから階層に出来ないかなー? oracleのSQLリファレンスあたりでCONNECT BY のサンプルに そんなサンプルがあった気がします。

evaag777
質問者

お礼

色々試してみて、取得を確認できました。 ご回答、どうもありがとうございます。

関連するQ&A