<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    悟心

    成功不是將來才有的,而是從決定去做的那一刻起,持續累積而成。 上人生的旅途罷。前途很遠,也很暗。然而不要怕。不怕的人的面前才有路。

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      93 隨筆 :: 1 文章 :: 103 評論 :: 0 Trackbacks
    Start withConnect By子句遞歸查詢一般用于一個表維護樹形結構的應用。
    創建示例表:
    CREATE TABLE TBL_TEST
    (
      ID    
    NUMBER,
      NAME  
    VARCHAR2(100 BYTE),
      PID   
    NUMBER                                  DEFAULT 0
    );
     
    插入測試數據:
    INSERT INTO TBL_TEST(ID,NAME,PID) VALUES('1','10','0');
    INSERT INTO TBL_TEST(ID,NAME,PID) VALUES('2','11','1');
    INSERT INTO TBL_TEST(ID,NAME,PID) VALUES('3','20','0');
    INSERT INTO TBL_TEST(ID,NAME,PID) VALUES('4','12','1');
    INSERT INTO TBL_TEST(ID,NAME,PID) VALUES('5','121','2');
     
    從Root往樹末梢遞歸
    select * from TBL_TEST
     start 
    with id=1
     connect 
    by prior id = pid
     
    從末梢往樹ROOT遞歸
    select * from TBL_TEST
     start 
    with id=5
     connect 
    by prior pid = id
    =====
    對于oracle進行簡單樹查詢(遞歸查詢)

    DEPTID PAREDEPTID NAME 
    NUMBER NUMBER CHAR (40 Byte) 
    部門id 父部門id(所屬部門id) 部門名稱 


    通過子節點向根節點追朔.

    Sql代碼 
    1.select * from persons.dept start with deptid=76 connect by prior paredeptid=deptid   
    Sql代碼  
    1.select * from persons.dept start with deptid=76 connect by prior paredeptid=deptid   
     
    select * from persons.dept start with deptid=76 connect by prior paredeptid=deptid  

    通過根節點遍歷子節點. 

    Sql代碼 
    1.select * from persons.dept start with paredeptid=0 connect by prior deptid=paredeptid   
    Sql代碼  
    1.select * from persons.dept start with paredeptid=0 connect by prior deptid=paredeptid   
    select * from persons.dept start with paredeptid=0 connect by prior deptid=paredeptid  

    可通過level 關鍵字查詢所在層次. 

    Sql代碼 
    1.select a.*,level from persons.dept a start with paredeptid=0 connect by prior deptid=paredeptid   
    Sql代碼  
    1.select a.*,level from persons.dept a start with paredeptid=0 connect by prior deptid=paredeptid   
    select a.*,level from persons.dept a start with paredeptid=0 connect by prior deptid=paredeptid  

    再次復習一下:start 
    with connect by 的用法, start with 后面所跟的就是就是遞歸的種子。 

    遞歸的種子也就是遞歸開始的地方 connect 
    by 后面的"prior" 如果缺省:則只能查詢到符合條件的起始行,并不進行遞歸查詢; 

    connect 
    by prior 后面所放的字段是有關系的,它指明了查詢的方向。 

    練習: 通過子節點獲得頂節點 

    Sql代碼 
    1.select FIRST_VALUE(deptid) OVER (ORDER BY LEVEL DESC ROWS UNBOUNDED PRECEDING) AS firstdeptid from persons.dept start with deptid=76 connect by prior paredeptid=deptid  
    ====這種方法只是當表里就有一顆樹,多棵樹怎么辦?

    .聲明:JavaEye文章版權屬于作者,受法律保護。沒有作者書面許可不得轉載。 
    posted on 2011-03-16 11:30 艾波 閱讀(701) 評論(0)  編輯  收藏 所屬分類: SQL
    主站蜘蛛池模板: 免费很黄很色裸乳在线观看| 日本免费一区二区三区四区五六区| 波霸在线精品视频免费观看| 最近中文字幕mv手机免费高清| 亚洲最大视频网站| 99久久精品免费精品国产| 亚洲综合男人的天堂色婷婷| 久久久久国产精品免费网站| 麻豆亚洲AV永久无码精品久久 | 国产亚洲色婷婷久久99精品91| 久久亚洲精品国产亚洲老地址 | 国产精品日本亚洲777| 国产成人精品免费视频大全五级| 亚洲GV天堂无码男同在线观看| 性生大片视频免费观看一级| 亚洲国产精品人人做人人爱| 亚洲精品中文字幕乱码| 91视频国产免费| 亚洲狠狠婷婷综合久久久久| 亚洲AV无码资源在线观看| 国产午夜无码视频免费网站| 香蕉国产在线观看免费| 亚洲av中文无码乱人伦在线咪咕| 1000部禁片黄的免费看| 国内精品久久久久影院亚洲| 四虎永久免费地址在线网站| 91成人免费福利网站在线| 亚洲美女aⅴ久久久91| 中国毛片免费观看| 亚洲欧洲日韩在线电影| 免费高清在线爱做视频| 人碰人碰人成人免费视频| 亚洲av福利无码无一区二区| 两个人看的www免费高清| 亚洲黄色在线观看视频| 在线观看无码的免费网站| 久久免费视频一区| 亚洲国产精品一区二区三区久久| 免费观看久久精彩视频| 国产亚洲国产bv网站在线| 日韩精品内射视频免费观看|