2

SQL で再帰クエリを送信する方法はありますか?

エンド ノード ID が与えられた場合、ルート ノード ( を持つparentid = NULL) までのすべての行をレベル順に並べる必要があります。たとえば、次のようなものがある場合:

nodeid | parentid
a      | NULL    
b      | a       
c      | b       

をクエリした後end_node_id = c、次のような結果が得られます。

nodeid | parentid | depth
a      | NULL     | 0
b      | a        | 1
c      | b        | 2

(深さの代わりに、指定されたエンドノードまでの距離でも作業できます)

私が思いつく唯一の (そして明らかな) 方法は、親ノードに到達するまで、行ごとに 1 つのクエリを実行することです。

それを行うためのより効率的な方法はありますか?

4

3 に答える 3

2

Oracle の場合、コメントで要求されているように、connect by演算子を使用して階層を生成し、level疑似列を使用して深さを取得できます。

SELECT     nodeid, parentid, LEVEL
FROM       t
START WITH parentid IS NULL
CONNECT BY parentid = PRIOR nodeid;
于 2015-01-09T09:50:35.707 に答える