ORACLE 數據庫的級聯查詢 一句sql搞定(部門多級)

在ORACLE 數據庫中有一種方法能夠實現級聯查詢
 
select  *                //要查詢的字段
from table              //具備子接點ID與父接點ID的表 
start with selfid=id      //給定一個startid(字段名爲子接點ID,及開始的ID號)
connect by prior selfid=parentid       //聯接條件爲子接點等於父接點
 
這個SQL主要用於級聯查詢,給一個父接點能夠查出全部的子接點。及子接點的子接點,一查到底,很實用。
 
例: 航班表airline,如何用sql語句查詢出從廣州出發能到達的全部目的地,容許任意中轉。
 
FLIGHTNO ORIGIN  DESTINATION
-------------------------------------------
cz3001  CAN  CSX
cz3002  CAN  SHA
cz3003  CSX  SHA
cz3004  CSX  PEK
cz3005  SHA  XIY
cz3006  SHA  SWA
cz3007  PEK  URC
cz3008  PVC  AMS
cz3009  WUH  PVC
cz3010  WUH  XIY
 
這裏根就是CAN,SQL語句以下:
 
select t.destination from airline t start with origin='CAN' connect by prior destination = origin;
 
查詢結果:

DESTINATION
-------------------
CSX  
SHA  
XIY  
SWA  
PEK  
URC  
SHA  
XIY  
SWA 
 

9 rows selected.
 
--------------------------------
 
 
在網上看到下面的例子應該更容易理解些,轉載一下:
 
 
數據結構以下:
t1
 t11
     t111
        t1111
 t12
     t121
        t1211
 
db數據字段以下:
task_id             task_name         t.parent_task_id       ***
***                     ***                          ***                               ***
000001            t1                         ***                                 ***
000002            t11                       000001                        ***
000005            t12                       000001                         ***
000003            t111                    000002                         ***
000004            t1111                  000003                         ***
000006            t121                    000005                         ***
000007            t1211                  000006                         ***
***                     ***                       ***                                 ***

查詢語句:

select t.task_id ,t.task_name ,t.parent_task_id 
from t_task t 
start with task_id='000001'
connect by prior task_id = parent_task_id;

結果顯示:
task_id                 task_name          t.parent_task_id
000001                t1           
000002                t11                       000001
000003                t111                     000002
000004                t1111                    000003
000005                t12                       000001
000006                t121                     000005
000007                t1211                   000006

strat with 指定層次開始的條件,便是說知足這個條件的行便可以作爲層次樹的最頂層 
  
connect by prior指層之間的關聯條件,即什麼樣的行是上層行的子行(自鏈接條件)
 查詢全部上級信息
select level ,id,name,parentid from temptable2 
  connect by prior parentid(屬於頂層的列)=id(子層的列)  start with id =1sql

相關文章
相關標籤/搜索