首页 > 其他 > 详细

with as 递归实现

时间:2020-07-30 14:58:38      阅读:70      评论:0      收藏:0      [点我收藏+]

递归在获取上下级所有信息中使用很方便;

给定一个tableA (id ,name,superid)  superid是id的上级,superid同时也是table表中的id,id又会有superid上级,类推。另外table中会有一个最高(低)级的id,在之上(下)没有更高的superid。这种结构的表满足递归的方法使用情景。

递归使用的两个约束:一是自顶(底)有一条完整连贯的分支链;二是有顶(底)点,也就是递归结束标志,否则容易造成死循环。

下例为获取id=100的以下所有分支id信息。

WITH T_Classify(id,Name,SuperID)
AS
(

--给定递归结束标志,遍历到顶点=100结束
select Name,ID,0 from tableA where ID=100

--自身遍历

union all

SELECT b.id,b.Name,b.SuperID
FROM tableA as b
INNER JOIN T_Classify ON b.superid = T_Classify.id
)
--取出结果集
select * from T_Classify

使用非递归方法需要自身left join 多层(保险起见,大于最小支点到最高支点的层数),而且后续又增加层数,代码还要调整,继续left join。这种方法既冗杂又不稳定,不推荐,感兴趣的可以写写看。

with as 递归实现

原文:https://www.cnblogs.com/2019-11-11/p/13403274.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!