階層問い合わせ - 葉を抽出する

メモ:  Category:oracle

CONNECT BY 句を使用する事で親子関係をたどり階層展開することができますが、その階層の終着点である「葉」だけを抽出することができます。例えば、部品表の中である材料が最終的にどのような製品に使われているのか知りたい時など利用できそうです。

connect_by_IsLeaf擬似列

次のようなツリー構造があるとします。

ツリー構造のイメージ

この中からオレンジ色の「葉」だけを抽出するには、connect_by_IsLeaf 疑似列を使います。

ツリー構造のイメージ

connect_by_IsLeaf 疑似列を使うと、そのノードが「葉」であれば 1 、「葉」でなければ 0 を返します。

SELECT parents,children 
FROM TREE_NODE
WHERE connect_by_IsLeaf = 1
START WITH parents = 'A'
CONNECT BY PRIOR children = parents;

「葉」にあたるレーコードが抽出されることを確認することができました。

parents      children
----------   -----------
A            D
B            E
B            F
C            E
C            G

bluenote by BBB