Oracle “CONNECT BY” 用法

來源:互聯網
上載者:User

標籤:

Oracle “CONNECT BY”是層次查詢子句,一般用於樹狀或者層次結果集的查詢。其文法是:

[ START WITH condition ]

CONNECT BY [ NOCYCLE ] condition

說明:
1. START WITH:告訴系統以哪個節點作為根結點開始尋找並構造結果集,該節點即為返回記錄中的最高節點。
2. 當分層查詢中存在上下層互為父子節點的情況時,會返回ORA-01436錯誤。此時,需要在connect by後面加上NOCYCLE關鍵字。同時,可用connect_by_iscycle偽列定位出存在互為父子迴圈的具體節點。 connect_by_iscycle必須要跟關鍵字NOCYCLE結合起來使用

[例1]

建立一個部門表,這個表有三個欄位,分別對應部門ID,部門名稱,以及上層業務ID

 

DEPID DEPNAME                                                                           UPPERDEPID

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

0 General Deparment                                                               

1 Development                                                                                0

2 QA                                                                                         0

3 Server Development                                                                         1

4 Client Development                                                                         1

5 TA                                                                                         2

6 Porject QA                                                                                 2

現在我要根據“CONNECT BY”來實現樹狀查詢結果

SQL> SELECT RPAD( ‘ ‘, 2*(LEVEL-1), ‘-‘ ) || DEPNAME "DEPNAME",

CONNECT_BY_ROOT DEPNAME "ROOT",

CONNECT_BY_ISLEAF "ISLEAF",

LEVEL ,

SYS_CONNECT_BY_PATH(DEPNAME, ‘/‘) "PATH"

FROM DEP

START WITH UPPERDEPID IS NULL

CONNECT BY PRIOR DEPID = UPPERDEPID;

DEPNAME                        ROOT                    ISLEAF      LEVEL PATH

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

General Deparment              General Deparment            0          1 /General Deparment

-Development                  General Deparment            0          2 /General Deparment/Development

---Server Development         General Deparment            1          3 /General Deparment/Development/Server Development

---Client Development         General Deparment            1          3 /General Deparment/Development/Client Development

-QA                           General Deparment            0          2 /General Deparment/QA

---TA                         General Deparment            1          3 /General Deparment/QA/TA

---Porject QA                 General Deparment            1          3 /General Deparment/QA/Porject QA

 

說明:
1. CONNECT_BY_ROOT 返回當前節點的最頂端節點
2. CONNECT_BY_ISLEAF 判斷是否為葉子節點,如果這個節點下面有子節點,則不為葉子節點
3. LEVEL 偽列表示節點深度
4. SYS_CONNECT_BY_PATH函數顯示詳細路徑,並用“/”分隔

總結:

1.根據樹形結構查子類

select * from xxxx where levelpermission = 0 and validflag = 1

start with id = ‘20130718091552GRP60000001‘

connect by prior id=PARENTID

 

2. 根據屬性結構查詢父類

select * from xxxx where levelpermission = 0 and validflag = 1

start with id = ‘40288181455dbe1701455ee92b9d001d‘

connect by prior PARENTID=id

2. 根據屬性結構查詢父類

部分轉載:http://www.cnblogs.com/lettoo/archive/2010/08/03/1791239.html

Oracle “CONNECT BY” 用法

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.