1.创建测试表,createtabletest_connect(idnumber,p_idnumber);
2.插入测试数据,
Insertintotest_connectvalues(1,1);
Insertintotest_connectvalues(2,1);
Insertintotest_connectvalues(3,2);
Insertintotest_connectvalues(4,3);
提交;
3.查询数据表的内容,选择*fromtest_connect,
4.执行递归查询语句,将答案添加到nocycle元素中,就不会有[ora-01436:CONNECTBYerrorintheuserdata]。执行结果如下:
Select*
来自test_connectt
从id=4开始
由nocyclepriort连接。p_id=t.i.
在 SQL 中,你可以使用递归查询来实现递归函数。递归查询是一种查询,其中结果集由一条或多条 SELECT 语句和一条用于查找下一级行的 UNION ALL 语句组成。例如,假设你有一张表,其中包含父子关系的信息(即,每个记录都有一个父级 ID,表示它的父级),你可以使用以下递归查询来查询每个记录的所有祖先:
WITH RECURSIVE ancestors AS (
-- 初始查询
SELECT id, parent_id
FROM your_table
WHERE id = :your_id
UNION ALL
-- 递归查询
SELECT t.id, t.parent_id
FROM your_table t
INNER JOIN ancestors a ON t.id = a.parent_id
)
SELECT id FROM ancestors
在这个查询中,我们使用了一个递归关系,其中第一个 SELECT 语句是初始查询,用于查询给定 ID 的记录。第二个 SELECT 语句是递归查询,用于查询与当前记录的父级相关的记录。通过将这两个 SELECT 语句用 UNION ALL 连接起来,我们就可以获得所有祖先的列表了。
sql 递归查询的方法:方法一:T-SQL递归查询
with Dep as
(
select Id,DeptCode,DeptName from Department where Id=1
union all
select d.Id,d.DeptCode,d.DeptName from Dep
inner join Department d on dep.Id = d.ParentDeptId
)
select * from Dep
方法二:PL/SQL递归查询
select Id,DeptCode,DeptName
from Department
start with Id = 1
connect by prior Id = ParentDeptId
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)