ブログリトライ

初心に戻って運営するブログです

Oracleの階層問合せ

Table: TREE_DATA

NODE_ID PARENT_NODE_ID NODE_NAME
------- -------------- ---------
      1              0 ルート
      2              1 子1
      3              2 子1の子
      4              1 子2

ってテーブルがあるとして、全階層を一発のSQLで取得しつつ、階層を維持したままNODE_NAMEでソートするには

 Select TD.*
   From TREE_DATA TD
  Start With TD.PARENT_NODE_ID = 0
Connect By Prior TD.NODE_ID = TD.PARENT_NODE_ID
  Order Siblings By TD.NODE_NAME

でイイらしい。
階層を一発で取得するところまでは知ってたけど、階層を維持したまま任意のキーでソートする方法は知らなかったので、目からウロコだった。