oracle递归展示层级
时间: 2023-07-04 22:22:02 浏览: 114
在Oracle中,我们可以使用递归查询来展示数据的层级关系。如果我们有一个包含层级关系的表,例如员工表EMP
,其中每个员工都有一个上级经理,我们可以使用递归查询来显示每个员工的层级关系。
下面是一个使用递归查询来展示员工层级关系的示例。我们假设员工表EMP
如下:
EMPNO ENAME JOB MGR
1 John Manager NULL
2 Bob Clerk 1
3 Alice Clerk 1
4 Tom Analyst 2
5 Mary Analyst 3
6 Jack Salesman 1
我们可以使用以下递归查询来展示每个员工的层级关系:
WITH emp_tree AS (
SELECT empno, ename, job, mgr, 0 AS level
FROM emp
WHERE mgr IS NULL
UNION ALL
SELECT emp.empno, emp.ename, emp.job, emp.mgr, emp_tree.level + 1
FROM emp_tree
JOIN emp ON emp.mgr = emp_tree.empno
)
SELECT LPAD(' ', 4*level)||ename AS ename, level
FROM emp_tree
ORDER BY level, empno;
在上面的查询中,我们首先定义了一个递归公共表达式emp_tree
,其中包含了所有顶级经理的信息。然后我们使用UNION ALL
运算符将顶级经理和他们的直接下属组合在一起,并将level
设置为0。接下来,我们使用JOIN
运算符将每个下属与其直接上级经理连接起来,并将level
设置为上级经理的level + 1
。最后,我们从递归公共表达式emp_tree
中选择每个员工的姓名和级别,并使用LPAD
函数来设置每个员工的缩进,以展示层级关系。
执行以上查询的结果如下:
ENAME LEVEL
--------------- -----
John 0
Bob 1
Tom 2
Alice 1
Mary 2
Jack 1
在这个结果中,我们可以看到每个员工的姓名和级别,以及由缩进表示的层级关系。其中,顶级经理的级别为0,直接下属的级别为1,间接下属的级别为2。
相关推荐
















