ORACLE查询树型关系(connect by prior start with)

来源:互联网 发布:linux rpm位置 编辑:程序博客网 时间:2024/05/17 11:34

 


您当前的位置:飞诺网>>  数据库>>  Oracle >> Oracle技术文档

 

 

 

 

 

ORACLE查询树型关系(connect by prior start with)


www.diybl.com    时间 : 2010-11-09  作者:佚名   编辑:fnw 点击:  4020 [ 评论 ]


 

 

 

 

ORACLE查询树型关系(connect by prior start with)
2007年07月26日 星期四 上午 10:26

 


connect by prior start with 经常会被用到一个表中存在递归关系的时候。比如我们经常会将一个比较复杂的目录树存储到一个表中。或者将一些部门存储到一个表中,而这些部门互相有隶属关系。这个时候你就会用到connect by prior start with。
 
典型的使用方法就是:

 

 

 

 

 


1

select * from table connect by prior cur_id=parent_id start with cur_id=???

 

例如:
a          b
1         0
2         1
3         1
4         2
5         3
 
如果想查找a=2及其下面的所有数据,则:

 

 

 

 

 


1

select * from table connect by prior a=b start with a=2

 

a         b
2         1
4         2
 
这些只是基础,皮毛。其实只要你灵活的构造查询语句。可以得出意想不到的结果。比如生成树每一个路径。
但是这些记录组成的树必须正常才可以。如果有互为父子的情况,就会出现循环错误!
 
示例:

C_AREA_CDE  C_SNR_AREA
1             
101       1
   103       1   

表数据
 

 

 

 

 


1

select * from tb_cus_area_cde

 
--子取父

 

 

 

 

 


1

select * from tb_cus_area_cde a   

 

 

2

CONNECT BY PRIOR   a.c_snr_area=a.c_area_cde START WITH a.c_area_cde=''1040101''

 
--父取子

 

 

 

 

 


1

select * from tb_cus_area_cde a   

 

 

2

CONNECT BY PRIOR   a.c_area_cde=a.c_snr_area START WITH a.c_snr_area is null
 

文章出处:飞诺网(www.diybl.com):http://www.diybl.com/course/7_databases/oracle/oraclejs/20071226/95507.html

原创粉丝点击