<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免费高清在线 | 色老头永久免费网站| 伊人久久精品亚洲午夜| 精品国产免费一区二区| 亚洲第一成人影院| 亚洲日本香蕉视频观看视频| 特级精品毛片免费观看| 久久精品国产精品亚洲蜜月| 特级精品毛片免费观看| 亚洲福利视频一区二区三区| 亚洲国产精品免费观看| 亚洲性线免费观看视频成熟| 国产一区二区三区免费看| 污污视频网站免费观看| 亚洲综合伊人久久大杳蕉| 精品一卡2卡三卡4卡免费视频| 亚洲人成亚洲精品| 久久久久久国产a免费观看黄色大片| 国产精品亚洲片在线va| 国产男女性潮高清免费网站| 国产一区二区三区亚洲综合| 亚洲欧洲一区二区三区| 国产午夜精品免费一区二区三区| 亚洲欧洲日韩综合| 日韩a级毛片免费观看| 亚洲同性男gay网站在线观看| 欧洲黑大粗无码免费| 无码天堂va亚洲va在线va| 亚洲乱码一区二区三区在线观看| 亚洲黄色免费观看| 国产产在线精品亚洲AAVV| 亚洲va久久久噜噜噜久久 | 亚洲视屏在线观看| 看全色黄大色大片免费久久| 色婷婷综合缴情综免费观看| 亚洲欧洲日韩不卡| 成人国产mv免费视频| 成人爽a毛片免费| 亚洲人成网站免费播放| 亚洲日韩欧洲无码av夜夜摸| 91成人免费观看网站|