db2 递归查询语句
时间: 2023-07-06 13:08:12 浏览: 149
DB2的递归查询语句使用WITH RECURSIVE子句。这个子句允许您指定一个递归查询,它可以从一个初始查询开始,然后通过使用自身的结果来重复执行查询,直到满足某个条件为止。
以下是一个示例,假设您有一个名为EMPLOYEE的表,其中包含员工ID和他们的经理ID。您想要递归查询所有员工及其经理的层次结构:
```
WITH RECURSIVE EMPLOYEE_HIERARCHY (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 E.EMPLOYEE_ID, E.EMPLOYEE_NAME, E.MANAGER_ID, EH.LEVEL + 1
FROM EMPLOYEE E
JOIN EMPLOYEE_HIERARCHY EH ON E.MANAGER_ID = EH.EMPLOYEE_ID
)
SELECT EMPLOYEE_ID, EMPLOYEE_NAME, MANAGER_ID, LEVEL
FROM EMPLOYEE_HIERARCHY
ORDER BY LEVEL, EMPLOYEE_NAME
```
这个查询使用了一个递归的WITH子句来创建名为EMPLOYEE_HIERARCHY的临时表。该表的第一个查询选择所有没有经理的员工,其中LEVEL设置为0。然后,使用UNION ALL运算符将第一个查询与第二个查询组合起来。第二个查询使用JOIN连接EMPLOYEE表和EMPLOYEE_HIERARCHY表,以查找每个员工的经理,并将LEVEL设置为EH.LEVEL + 1。这样就实现了递归查询。最后,查询选择EMPLOYEE_HIERARCHY表的所有列,并按LEVEL和EMPLOYEE_NAME进行排序。
阅读全文