oracle with RECURSIVE
时间: 2023-07-22 09:44:08 浏览: 129
Oracle数据库并不支持WITH RECURSIVE语法,但可以使用CONNECT BY语法来实现递归查询。CONNECT BY语法是Oracle数据库中用来进行递归查询的关键字。
例如,如果您想要查询一个员工以及其所有下属员工的信息,可以使用以下语句:
```
SELECT employee_id, employee_name, manager_id
FROM employees
START WITH employee_id = 1
CONNECT BY PRIOR employee_id = manager_id;
```
上述SQL语句中,START WITH语句指定了起始的员工ID为1,CONNECT BY语句中的PRIOR关键字表示连接条件为上一行的employee_id等于当前行的manager_id,即查询所有下属员工的信息。
希望对您有所帮助。
相关问题
oracle with recursive用法
Oracle中的`WITH RECURSIVE`可以用于执行递归查询。以下是使用`WITH RECURSIVE`的基本语法:
```
WITH RECURSIVE cte_name (column1, column2, ...) AS (
-- 初始查询
SELECT column1, column2, ...
FROM table_name
WHERE condition
UNION ALL
-- 递归查询
SELECT column1, column2, ...
FROM table_name
JOIN cte_name ON join_condition
WHERE condition
)
-- 最终查询
SELECT column1, column2, ...
FROM cte_name
WHERE condition;
```
其中,`cte_name`是递归查询的名称,`column1, column2, ...`是要选择的列名,`table_name`是要查询的表名,`condition`是查询条件。初始查询和递归查询的结构相同,但它们的条件不同。在递归查询中,`JOIN`子句连接递归查询和前一次查询结果。最终查询从递归查询中选择所需的列,并应用最终条件。
以下是一个简单的例子,使用`WITH RECURSIVE`查询一个组织结构的层次结构:
```
WITH RECURSIVE org_chart (employee_id, full_name, manager_id, level) AS (
-- 初始查询
SELECT e.employee_id, e.first_name || ' ' || e.last_name, e.manager_id, 1
FROM employees e
WHERE e.manager_id IS NULL
UNION ALL
-- 递归查询
SELECT e.employee_id, e.first_name || ' ' || e.last_name, e.manager_id, c.level + 1
FROM employees e
JOIN org_chart c ON e.manager_id = c.employee_id
)
-- 最终查询
SELECT employee_id, full_name, manager_id, level
FROM org_chart
ORDER BY level, full_name;
```
在这个例子中,我们使用`employees`表来表示组织结构。我们从没有经理的员工开始(初始查询),然后递归查询所有员工的层次结构。最终查询从递归查询中选择所需的列,并按层次结构和姓名排序。
with recursive oracle
WITH RECURSIVE是Oracle中用于递归查询的语法。它允许我们在查询中使用递归结构,以便在结果集中返回与查询条件匹配的所有层级的数据。
具体来说,使用WITH RECURSIVE语句可以定义一个临时表,然后使用这个临时表进行递归查询。在递归查询中,我们可以使用UNION ALL将临时表和原始表连接起来,并在连接条件中使用先前迭代的结果。这样,每次迭代都会将符合条件的数据添加到临时表中,直到达到递归终止条件。
在你提供的例子中,使用了WITH RECURSIVE语句查询了sys_info表中id为'00031'的记录及其子节点的信息。临时表temp的结构包括id、name和pid三个字段。首先,查询将id为'00031'的记录添加到temp表中。然后,在每一次迭代中,通过连接条件temp.id = o.pid,在sys_info表中将符合条件的子节点添加到temp表中。这个过程会一直进行,直到没有符合条件的子节点为止。
最终,通过SELECT * FROM temp语句可以获取到递归查询结果的所有记录。在这个例子中,查询的结果是符合条件的id字段。
总结起来,通过使用WITH RECURSIVE语句,我们可以在Oracle中进行递归查询,获取符合条件的所有层级的数据。这在处理具有层次结构关系的数据时非常有用。
阅读全文