1. 程式人生 > >oracle中 start with .. connect by prior.. 用法簡介

oracle中 start with .. connect by prior.. 用法簡介

bsp 簡單 parent 目錄樹 lena prior conn 就是 比較

我們經常會將一個比較復雜的目錄樹存儲到一個表中。或者將一些部門存儲到一個表中,而這些部門互相有隸屬關系。這個時候你就會用到connect by prior start with。oracle 提供了start with connect by 語法結構可以實現遞歸查詢。

connect by 是結構化查詢中用到的,其基本語法是:

  select ... from tablename start with 條件1

  connect by prior 條件2

  where 條件3;

  例:

  select * from table

  start with org_id = ‘HBHqfWGWPy‘

  connect by prior org_id = parent_id;

  簡單說來是將一個樹狀結構存儲在一張表裏,比如一個表中存在兩個字段:

  org_id,parent_id那麽通過表示每一條記錄的parent是誰,就可以形成一個樹狀結構。

  用上述語法的查詢可以取得這棵樹的所有記錄。

  其中:

  條件1 是根結點的限定語句,當然可以放寬限定條件,以取得多個根結點,實際就是多棵樹。

  條件2 是連接條件,其中用PRIOR表示上一條記錄,比如 CONNECT BY PRIOR org_id = parent_id就是說上一條記錄的org_id 是本條記錄的parent_id,即本記錄的父親是上一條記錄。

  條件3 是過濾條件,用於對返回的所有記錄進行過濾。

例如:

沒有加中start with ... connect by prior ...的查詢結果:

select t.dim_id, t.pid, level

from pmcode.pmcode_fj_tree_rl t

where t.dim_id in (select b.dim_id

from pmcode.PMCODE_KPI_DIM_OD b

where b.kpi_id = ‘KC0011‘)

結果:

DIM_ID PID LEVEL

---------------------

1024 5003 0

1070 0 0

5003 1070 0

5006 0 0

------------------------------------------------------------------------------------

增加start with ... connect by prior ...以後的結果:

select t.dim_id, t.pid, level

from pmcode.pmcode_fj_tree_rl t

where t.dim_id in (select b.dim_id

from pmcode.PMCODE_KPI_DIM_OD b

where b.kpi_id = ‘KC0011‘)

start with t.dim_id = ‘1070‘ ----表示從dim_id = ‘1070‘開始(也就是說1070為根節點)

connect by prior t.dim_id = t.pid; ----表示上條記錄的dim_id等於本條記錄的pid

結果:

DIM_ID PID LEVEL

---------------------

1070 0 1

5003 1070 2

1024 5003 3

oracle中 start with .. connect by prior.. 用法簡介