隨筆-17  評(píng)論-64  文章-79  trackbacks-1
          ORACLE查詢樹型關(guān)系(connect by prior start with)
          2007年07月26日 星期四 上午 10:26

          connect by prior start with 經(jīng)常會(huì)被用到一個(gè)表中存在遞歸關(guān)系的時(shí)候。比如我們經(jīng)常會(huì)將一個(gè)比較復(fù)雜的目錄樹存儲(chǔ)到一個(gè)表中。或者將一些部門存儲(chǔ)到一個(gè)表中,而這些部門互相有隸屬關(guān)系。這個(gè)時(shí)候你就會(huì)用到connect by prior start with。

          典型的使用方法就是:
          select * from table connect by prior cur_id=parent_id start with cur_id=???
          例如:
          a          b
          1         0
          2         1
          3         1
          4         2
          5         3

          如果想查找a=2及其下面的所有數(shù)據(jù),則:
          select * from table connect by prior a=b start with a=2
          a         b
          2         1
          4         2

          這些只是基礎(chǔ),皮毛。其實(shí)只要你靈活的構(gòu)造查詢語句。可以得出意想不到的結(jié)果。比如生成樹每一個(gè)路徑。
          但是這些記錄組成的樹必須正常才可以。如果有互為父子的情況,就會(huì)出現(xiàn)循環(huán)錯(cuò)誤!

          示例:

          C_AREA_CDE  C_SNR_AREA
          1             
          101       1
             103       1   

          表數(shù)據(jù)

          select * from tb_cus_area_cde

          --子取父
          select * from tb_cus_area_cde a    
          CONNECT BY PRIOR   a.c_snr_area=a.c_area_cde START WITH a.c_area_cde='1040101'

          --父取子
          select * from tb_cus_area_cde a    
          CONNECT BY PRIOR   a.c_area_cde=a.c_snr_area START WITH a.c_snr_area is null

          posted on 2007-09-12 13:12 飛鳥 閱讀(669) 評(píng)論(0)  編輯  收藏 所屬分類: 數(shù)據(jù)庫(kù)
          主站蜘蛛池模板: 扬中市| 克东县| 县级市| 玉田县| 长春市| 甘孜| 遂溪县| 科技| 涪陵区| 尉犁县| 新宁县| 平乡县| 江都市| 罗定市| 清镇市| 新津县| 福泉市| 北碚区| 宜丰县| 福清市| 泰兴市| 沙田区| 灵丘县| 大同县| 石屏县| 长沙市| 临清市| 抚松县| 台东县| 大英县| 南陵县| 广州市| 河津市| 平和县| 子洲县| 武清区| 开封县| 米易县| 屏山县| 浦北县| 玉屏|