架构师之oracle------------父子序列递归查询

1。前言。
如题。

2。代码。


数据库中常要处理父子关系的记录,在oracle中可以用查询语句一次把所有的子记录全部取出来。例如下:
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;
结果显示:
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



2.注意:
PRIOR 放在connect等号前面是从顶级往下找,如果放在等号后面如=PRIOR id则可以实现从底往上找,这可以用来实现一条语句找到顶层或者底层。
摘自:http://blog.sina.com.cn/s/blog_46d93f190101h7y6.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值