oracle中connect by prior父子查询

--父子查询

--prior 代表 上一条记录

drop table cs_thz_1;

create table cs_thz_1(   id number(10)   ,sname varchar2(100)   ,sremark varchar2(1000)   ,parentid number(10) ) ;

truncate table cs_thz_1;

insert into cs_thz_1(id,sname,sremark,parentid)

select 1 id,'中国' sname,' ' sremark,null parentid from dual union all

select 2 id,'美国' sname,' ' sremark,null parentid from dual union all

select 3 id,'北京' sname,' ' sremark,1 parentid from dual union all

select 4 id,'广东' sname,' ' sremark,1 parentid from dual union all

select 5 id,'广州' sname,' ' sremark,4 parentid from dual union all

select 6 id,'珠海' sname,' ' sremark,4 parentid from dual union all

select 7 id,'白云区' sname,' ' sremark,5 parentid from dual union all

select 8 id,'天河区' sname,' ' sremark,5 parentid from dual union all

select 9 id,'珠江新城' sname,' ' sremark,8 parentid from dual union all

select 10 id,'纽约' sname,' ' sremark,2 parentid from dual ;

commit;

--查询广州的下级区域(广州第一行,且广州是最大)  ,prior就代表第一行要显示的,第一行和第二行相比,大的那行用id,小的那行用parentid, 也可以说prior代表上一行

select t.*,level  from cs_thz_1 t start with id=5 connect by parentid= prior id ;

 

--查询广州的上级区域(广州第一行,且广州最小)  他作为儿子(prior的另一边是他)

select a.*,level from cs_thz_1 a start with id=5 connect by prior parentid = id  ;

--sys_connect_by_path 顶级往下翻 select id,sname,parentid,sys_connect_by_path(sname,'-'),level 自生成lvl from cs_thz_1 start with parentid is null connect by parentid =prior id  ;

转载于:https://www.cnblogs.com/jiangqingfeng/p/9555991.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值