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

          connect by prior start with 經(jīng)常會被用到一個(gè)表中存在遞歸關(guān)系的時(shí)候。比如我們經(jīng)常會將一個(gè)比較復(fù)雜的目錄樹存儲到一個(gè)表中。或者將一些部門存儲到一個(gè)表中,而這些部門互相有隸屬關(guān)系。這個(gè)時(shí)候你就會用到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è)路徑。
          但是這些記錄組成的樹必須正常才可以。如果有互為父子的情況,就會出現(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 飛鳥 閱讀(664) 評論(0)  編輯  收藏 所屬分類: 數(shù)據(jù)庫
          主站蜘蛛池模板: 高陵县| 维西| 阳朔县| 柳州市| 咸阳市| 大余县| 长泰县| 永兴县| 黑河市| 定州市| 大洼县| 虞城县| 青岛市| 杨浦区| 呼伦贝尔市| 静安区| 大兴区| 稷山县| 射洪县| 扎鲁特旗| 海原县| 金溪县| 子洲县| 安福县| 大城县| 岳阳县| 博湖县| 东乌珠穆沁旗| 太仓市| 陆丰市| 泽州县| 固阳县| 滨海县| 巢湖市| 枞阳县| 宁化县| 宣城市| 石景山区| 收藏| 亚东县| 贵州省|