Oracle递归 Start with 和Connect By

--Oracle递归查询语法格式:
 select * from tablename
 start with ...//and连接条件
 connect by prior 。。。//and 连接条件
 where 
 
 --测试数据建立
 create table employeer(
 company varchar2(30),
 pos varchar2(30),
 manager varchar2(30)
 )
 insert into employeer values('通软','研发1','开发经理1');
 insert into employeer values('通软','研发2','开发经理1');
 insert into employeer values('通软','研发3','开发经理2'); 
 insert into employeer values('通软','开发经理1','产品经理1');
 insert into employeer values('通软','开发经理2','产品经理2');
 insert into employeer values('通软','产品经理1','部门老总1');
 insert into employeer values('软件','研发1','开发经理1');
 insert into employeer values('软件','研发2','开发经理1');
 insert into employeer values('软件','研发3','开发经理2'); 
 insert into employeer values('软件','开发经理1','产品经理1');
 insert into employeer values('软件','开发经理2','产品经理2');
 insert into employeer values('软件','产品经理1','部门老总1');
 
 //查询通软 部门老总1的下级
 start with pos='部门老总1' and company='通软'//否则定位的时候会把软件的部门老总1也给定位出来
 connect by prior pos=manager;
 
 --完整正确代码:
 select * from employeer
 start with pos='产品经理1' and company='通软'
 connect by prior pos=manager and company='通软'
 --结果:
    	COMPANY	POS	MANAGER
 1	通软	产品经理1	部门老总1
 2	通软	开发经理1	产品经理1
 3	通软	研发1	开发经理1
 4	通软	研发2	开发经理1
 
 --1,错误示例
 
 select * from employeer
 start with pos='产品经理1' and company='通软'
 connect by prior pos=manager 
    	COMPANY	POS	MANAGER
 1	通软	产品经理1	部门老总1
 7	软件	开发经理1	产品经理1
 2	通软	开发经理1	产品经理1
 10	软件	研发1	开发经理1
 5	软件	研发1	开发经理1
 3	通软	研发1	开发经理1
 8	通软	研发1	开发经理1
 11	软件	研发2	开发经理1
 9	通软	研发2	开发经理1
 4	通软	研发2	开发经理1
 6	软件	研发2	开发经理1
 select * from employeer
 start with pos='产品经理1' 
 connect by prior pos=manager and company='通软'
 5	软件	产品经理1	部门老总1
 1	通软	产品经理1	部门老总1
 6	通软	开发经理1	产品经理1
 2	通软	开发经理1	产品经理1
 8	通软	研发2	开发经理1
 7	通软	研发1	开发经理1
 3	通软	研发1	开发经理1
 4	通软	研发2	开发经理1
 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值