oracle 树形结构递归查询
时间: 2023-10-12 17:00:14 浏览: 255
在 Oracle 中,可以使用递归查询语句来查询树形结构数据。以下是一个示例:
假设有一张名为 EMPLOYEE 的表,存储员工信息,其中有两个字段:EMPLOYEE_ID 和 MANAGER_ID。其中,EMPLOYEE_ID 为员工编号,MANAGER_ID 为该员工的上级领导的员工编号。可以使用以下语句查询员工树形结构:
WITH EMPLOYEE_TREE (EMPLOYEE_ID, EMPLOYEE_NAME, MANAGER_ID, LEVEL) AS
(
SELECT EMPLOYEE_ID, EMPLOYEE_NAME, MANAGER_ID, 0
FROM EMPLOYEE
WHERE MANAGER_ID IS NULL
UNION ALL
SELECT EMPLOYEE.EMPLOYEE_ID, EMPLOYEE.EMPLOYEE_NAME, EMPLOYEE.MANAGER_ID, EMPLOYEE_TREE.LEVEL + 1
FROM EMPLOYEE, EMPLOYEE_TREE
WHERE EMPLOYEE.MANAGER_ID = EMPLOYEE_TREE.EMPLOYEE_ID
)
SELECT EMPLOYEE_ID, EMPLOYEE_NAME, MANAGER_ID, LEVEL
FROM EMPLOYEE_TREE
ORDER BY LEVEL, EMPLOYEE_ID;
上述语句使用了 WITH 子句来定义了一个名为 EMPLOYEE_TREE 的递归查询公共表达式。在第一个 SELECT 子句中,查询出所有顶级节点(即 MANAGER_ID 为 NULL 的节点)。在第二个 SELECT 子句中,使用递归方式查询出所有下级节点,并将 LEVEL 层级加 1。最后,在外层 SELECT 子句中,查询 EMPLOYEE_TREE 表的所有记录,并按照 LEVEL 和 EMPLOYEE_ID 排序。
使用类似上述语句,可以方便地查询出树形结构数据。
阅读全文