如何在Oracle数据库中使用递归查询
测试数据
-- 创建部门表
CREATE TABLE DEPT (
DEPT_ID INT PRIMARY KEY,
DEPT_NAME VARCHAR2(100),
PARENT_DEPT_ID INT
);
-- 插入测试数据
INSERT INTO DEPT (DEPT_ID, DEPT_NAME, PARENT_DEPT_ID) VALUES (1, '总部', NULL);
INSERT INTO DEPT (DEPT_ID, DEPT_NAME, PARENT_DEPT_ID) VALUES (2, '研发部', 1);
INSERT INTO DEPT (DEPT_ID, DEPT_NAME, PARENT_DEPT_ID) VALUES (3, '市场部', 1);
INSERT INTO DEPT (DEPT_ID, DEPT_NAME, PARENT_DEPT_ID) VALUES (4, '技术组', 2);
INSERT INTO DEPT (DEPT_ID, DEPT_NAME, PARENT_DEPT_ID) VALUES (5, '销售组', 3);
代码实现
使用CONNECT BY 实现
-- 查询某个部门及其所有子部门的信息
-- DEPT_ID是我们指定的起始部门ID参数
SELECT DEPT_ID, DEPT_NAME, PARENT_DEPT_ID
FROM DEPT
START WITH DEPT_ID = 1
CONNECT BY PRIOR DEPT_ID = PARENT_DEPT_ID;
使用WITH子表实现
-- 使用WITH子句实现递归查询
WITH RECURSIVE_DEPT(DEPT_ID, DEPT_NAME, PARENT_DEPT_ID) AS (
SELECT T1.DEPT_ID, T1.DEPT_NAME, T1.PARENT_DEPT_ID
FROM DEPT T1
WHERE T1.DEPT_ID = 1
UNION ALL
SELECT T2.DEPT_ID, T2.DEPT_NAME, T2.PARENT_DEPT_ID
FROM DEPT T2
INNER JOIN RECURSIVE_DEPT ON T2.PARENT_DEPT_ID = RECURSIVE_DEPT.DEPT_ID
)
SELECT DEPT_ID, DEPT_NAME, PARENT_DEPT_ID
FROM RECURSIVE_DEPT;
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Yang!