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小时内删除。