Oracle級聯查詢,Oracle級聯
在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;
http://roucheng.cnblogs.com/
結果顯示:
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 =1
http://www.cnblogs.com/roucheng/p/5404594.html