SQL---START WITH的用法


轉:http://myiteyeverywell-163-com.iteye.com/blog/1471752

我們經常會將一個比較復雜的目錄樹存儲到一個表中。或者將一些部門存儲到一個表中,而這些部門互相有隸屬關系。這個時候你就會用到connect by prior start with。

 

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM