Sql递归原理
递归最少包括两个查询(也被称为成员)。第一个查询为定点成员,定点成员只是一个返回有效表的查询,用于递归的基础或定位点。
第二个查询被称为递归成员,使该查询成为递归成员的是对递归引用时触发(递归表.id与该表的pid)。在逻辑上,可以将其理解为是前一个查询语句的子集。
递归查询没有显式的递归终止条件,只有当第二个递归查询返回空结果集或是超出了递归次数的最大限制时才停止递归。递归次数上限的方法是使用MAXRECURION。
子向父节点递归
select * from table start with id=1 connect by prior pid=id
父向子节点递归(不含根节点)
select * from table start with pid=1 connect by prior id=pid
父向子节点递归(含根节点)
select * from table start with id=1 connect by prior id=pid
也可以设置条件来查询(子向父) 例如:
select * from table where id = 1 start with id=id connect by prior pid=id
也可以根据查到未知id值来查询(子向父)
select a.id ,(select * from table where id = a.id start with id=id connect by prior pid=id) as pid from table