SQL-在具有上下级关系的表中,找到没有下级的员工级别路径
程序员文章站
2024-03-15 17:50:18
...
需求:在具有上下级关系的表中,找到没有下级的员工的上级所有员工路径。如: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;