- ベストアンサー
SQLでテーブルのデータを取得する方法
- SQLを使用して、2つのテーブルからデータを取得する方法を教えてください。テーブル1のキーに対応するテーブル2の名称も取得したいです。
- テーブル1のキーとテーブル2の名称を関連付けて取得する方法をSQLで実現したいです。1つのキーに対して1つのデータを取得するので、名称は特定文字で区切って取得したいです。
- 1回のSQL発行でテーブル1のキーとテーブル2の名称を取得する方法を教えてください。テーブル1のキーは重複しないため、一意のデータを取得することができます。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
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では期待結果が取得できました。
その他の回答 (1)
- tsuduki123
- ベストアンサー率32% (21/65)
#手元で実験できないのでてきとーなことを言っているかもしれないので参考程度に。 CONNECT BY と SYS_CONNECT_BY_PATH() を組み合わせればちょこちょこっとできませんかね? KEYの値が同一だから階層に出来ないかなー? oracleのSQLリファレンスあたりでCONNECT BY のサンプルに そんなサンプルがあった気がします。
お礼
色々試してみて、取得を確認できました。 ご回答、どうもありがとうございます。
お礼
お礼が遅くなりました。 取得を確認できました。 ご回答どうもありがとうございました。