2017-10-25 1 views
0

私はデータを階層的な順序で格納していますが、親の中に最も深い子がある順番にすべての親を探したい(親子 - > grand grand - > grand grand children ....など)、現在私はconnect by節を使ってすべての子(即時および拡張子..)を取得しますが、最も深い子のパスを持つすべての親IDを取得する必要があります。Oracleで最も深い子のパスを持つ親レコードを取得する

次のクエリは、階層問合せでの深さがlevelと呼ばれている1501605カテゴリ

select category_id, parent_id 
from CATEGORY 
start with CATEGORY_ID = 1501605 
connect by PARENT_ID = PRIOR CATEGORY_ID 

答えて

1

の下で私のすべての子供たちを提供します。レベル(降順)を超えてrankを実行すると、最も深いレベルで結ばれたツリー内のすべてのノードが取得されます。

select category_id, parent_id 
from (
    select category_id, parent_id, level, rank() over (order by level desc) as deepest 
    from CATEGORY 
    start with CATEGORY_ID = 1501605 
    connect by PARENT_ID = PRIOR CATEGORY_ID 
) where deepest = 1 
; 
+0

私はこれを最初からやりなうことでできますか? – user1614862

+0

実際には、レベルを使用するために接続する必要はありません。しかし、おそらく同じことをするPL/SQLループを書くことができます。 – kfinity

関連する問題