SQL-在具有上下级关系的表中,找到没有下级的员工级别路径

需求:在具有上下级关系的表中,找到没有下级的员工的上级所有员工路径。如:A的下级是B,B的下级是C,C的下级是D,D没有下级。这时输出/A/B/C/D

分析与解答:

使用分层查询【level connect_by_isleaf start with connect by order siblings
connect_by_isleaf=1表示该节点为叶子节点,即没有下级。【connect_by_isleaf 伪列
sys_connect_by_path(ename,'/') 该函数为路径函数

select
level,
empno,
ename,
sys_connect_by_path(ename,'/') 路径,  --路径函数
connect_by_isleaf
from emp
start with mgr is null
connect by (prior empno)=mgr
order siblings by empno;  

在这里插入图片描述
上述结果为每一个员工的路径,而取没有下级的员工的路径应加上条件connect_by_isleaf=1
在分层查询中使用where子句,是先查出分层查询的结果,再使用where子句过滤

select
level,
empno,
ename,
sys_connect_by_path(ename,'/') 路径,
connect_by_isleaf
from emp where connect_by_isleaf=1
start with mgr is null
connect by (prior empno)=mgr
order siblings by empno;  

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_36522099/article/details/105434978
今日推荐