Oracle 中递归查询

转自:http://blog.sina.com.cn/s/blog_50fa47c70100h5d1.html

有这样的一个需求:

顺义区的 region_code 是 110113 ,parent_code 是110000 ,亦即 顺义的父记录是北京。

 

Oracle SQL 语句   start with ...connect by  [prior]:

start with 后面所跟的就是就是递归的种子,也就是递归开始的地方.

connect by 后面的"prior" 如果缺省:则只能查询到符合条件的起始行,并不进行递归查询;connect by prior 后面所放的字段是有关系的,它指明了查询的方向

 

select Column1,Column2,from tableName

start with Column 1='1234'

connect by prior Column1 =Column2

根据 谁(子节点,父节点) 语句最后的 connect by prior Column1 =Column2 Column2就写成谁

也就是 : 如果根据 子节点查询,Column2 就要写成 子节点代表的 字段

          如果根据 父节点查询,Column2 就要写成 父节点代表的 字段

 

1. 通过 子记录查询父记录

现在要求根据顺义的 region_code 查询出其上级所有的记录。也就是根据 子节点的记录,查询父节点记录。

select region_code,region_desc,parent_code  from V_REGION_CODE 
start with region_code ='110113'
connect by prior parent_code=region_code

解释: 如果是通过 子节点查询父节点记录,则 connect by prior 要写成 ParentColumn = ChildColumn

 

 

2.通过父记录查询子记录

现在要求根据北京的region_code 查询所有北京的子记录。也就是根据父节点查询 子节点。

select region_code,region_desc ,parent_code  from V_REGION_CODE 
start with region_code ='110000'
connect by prior  region_code=parent_code

解释: 如果通过 父节点 查询子节点记录, 则connect by prior 要写成 chilidColumn = praentColumn

 

 

3.可通过level 关键字查询所在层次.
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值