なかなかどうして、この有様よ。

へたれ系PG/SEの技術系メモ+育児日記。

Oracleのstart with/connect byで、子から親へ逆順のツリーを取得する。


これを元にSQLを作成。
でも、今回は指定されたIDから親をたどって、自分とその親を全部取りたかったので、start with以降の部分を変えてみた。

通常だとこんな感じ。
select ID,OyaID,Level
  from IDTable
start with OyaID is null
connect by prior ID = OyaID;

今回はこんな感じ。
select ID,OyaID,Level
  from IDTable
start with ID = 7
connect by prior OyaID = ID;

通常のツリーとは逆順のツリーを作成して、自分(この場合ID=7)を基準に親コードを取得するように作成。

この発想が思い浮かばなくてだいぶ悩んだのでメモ。

ちなみに、別テーブルにIDと紐付く任意のデータがあって、それと結合してるときは外部結合しないと親のデータは取れないので注意。