前提
まず例として、企業の合併情報を管理している下記のようなテーブルがあるとします。
現時点で一番親の会社はA社ですが、このA社の情報を取得する際に紐づくすべての子会社の情報も取ってきたいです。
(A社の直属の子会社であるB社、C社だけでなくB社の子会社、その下のE社の子会社も取りたい)
上記の子会社情報を階層のない1つのリストするのが最終目標です。
現状
最初はA社の直属とその下(B社の子会社)まで取ってくる仕様でしたので、今の実装では
合併明細テーブルにAAAで検索をかけて取得したリストをループ→その中で更に合併明細にBBB、CCCで検索かけてリストに追加
という形で一度だけループをしています。
知りたいこと
親子関係の階層がどれくらいの深さになるかが分からないためループで取得するのは非現実的かと思っているのですが、
調べてもなかなかいい方法が出てこず困っています。
JavaでもSQLでも構いませんので何かアドバイスをいただけたら幸いです。
言葉足らずな部分ありましたら補足しますのでコメントください。よろしくお願い致します。
解決後追記
以下、ベストアンサーを参考に組んだSQLです。
SQL
1with temp (親会社ID, 子会社ID, lvl) as ( 2 select 親会社ID, 子会社ID, 1 from 合併明細テーブル 3 where 親会社ID = 'AAA' 4 union all 5 select G.親会社ID, G.子会社ID, T.lvl+1 from 合併明細テーブル G, temp T 6 where G.親会社ID = T.子会社ID 7) search breadth first by 子会社ID set order1 8select 親会社ID, 子会社ID, lvl from temp;
取得結果
ご協力いただいた皆様ありがとうございました。
回答3件
あなたの回答
tips
プレビュー