--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
Oracle递归 Start with 和Connect By
最新推荐文章于 2024-06-19 22:06:22 发布