級聯查詢 oracle 中connect by prior實現遞歸查詢

 

對於大多數的程序員 遇到級聯查詢的概率很高  今兒寫一下級聯查詢的sql  網上也有一些 我做一下 自己的總結

 

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');

--------------------------------------------------------------------------------------------------

    ID                NAME             PID

    1                    10                  0

    2                    11                  1

    3                    20                  0

    4                    12                  1

    5                    121                 2

----------------------------------------------------------------------------------------------------

       從Root往樹末梢遞歸

  select * from TBL_TEST

  start with id=1

  connect by prior id = pid  

注:(start with id = 1  表示的是 以1爲根節點的樹  從跟到葉的查詢 此查詢語句 爲 一顆樹   , PRIOR表示上一條記錄,比如 CONNECT BY PRIOR ID=PID就是說上一條記錄的ID是本條記錄的PRAENTID,即本記錄的父親是上一條記錄。 從而 判定 查詢順序 爲 從跟到葉)

   查詢結果

 

ID       NAME         PID

1          10                0
2          11                1
5          121              2
4          12                1

-----------------------------------------------------------------------------------------------------

  從末梢往樹ROOT遞歸

  select * from TBL_TEST

  start with id=5

  connect by prior pid = id

 上一條記錄的 父節點 爲本記錄的 節點   既 此查詢出來的 爲一顆倒樹 既從葉到跟的順序

 

運行結果:

ID         NAME          PID

5            12                 1
2            1                    1
1            1                    0

 

                                 本文 主要是對 http://www.poluoluo.com/jzxy/201004/81956.html  文章進行補充    

                                 

 

              

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章