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 ***oracle数据库怎么查询表
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 =1
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论