0

次のようなOracleテーブルがあります。

スキーマ:

(数値) node_id

(数値)parent_id

(数値)parent_seq

テーブル内の各エントリは、1 つの親子関係を表します。親は複数の子の親になることができ、子は複数の親を持つことができます (ただし、コミットする前に検証されるため、サイクルは存在しないと想定できます)。子に複数の親がある場合、テーブル内の node_id に対応する複数の行があり、parent_seq は親ごとに増加します。

ここで、ツリー全体を再構築する必要はありません。各ノードの DEPTH を知る必要があるだけです。DEPTH の一般的な定義に従う (木の深さと高さの違いは何ですか? )

ノードの深さは、ノードからツリーのルート ノードまでのエッジの数です。

CONNECT_BY 構文を使用して Oracle でこれを適切に行う方法はありますか?

4

2 に答える 2

1
select
   node_id,
   min(level) as best_level,
   min(sys_connect_by_path(node_id, '/')) 
      keep (dense_rank first order by level) 
      as best_path
from t
start with parent_id is null
connect by prior node_id = parent_id
group by node_id
order by 1

フィドル

于 2013-04-16T15:15:19.977 に答える