Oracle中递归查询(START WITH……CONNECT BY……)
在Oracle中,可以使用START WITH... CONNECT BY...
结构进行递归查询,这常用于查询树或层次结构的数据。
例如,假设有一个组织结构表employees
,其中包含employee_id
和manager_id
列,前者表示员工ID,后者表示该员工的直接上级ID。
要查询某个员工的所有下属(不仅仅是直接下属,而是所有下属),可以使用如下的递归查询:
SELECT employee_id, manager_id
FROM employees
START WITH employee_id = :start_employee_id -- 这里的:start_employee_id是一个绑定变量,表示起始员工ID
CONNECT BY PRIOR employee_id = manager_id; -- 表示上一级员工的ID是当前级别员工的Manager_id
如果你想查询某个员工的所有上级(直接上级以及所有上级),只需要调整START WITH
子句和CONNECT BY
子句的条件即可:
SELECT employee_id, manager_id
FROM employees
START WITH employee_id = :start_employee_id -- 起始员工ID
CONNECT BY PRIOR manager_id = employee_id; -- 表示当前级别员工的ID是上一级别的Manager_id
在这两个例子中,:start_employee_id
是你想要开始递归查询的节点。CONNECT BY
子句定义了层次查询中的“父/子”关系,而PRIOR
关键字表示上一个层次的行记录。
评论已关闭