妙用CTE,一条语句实现sql递归查询,SQLServer 递归

数据库设计中经常碰到父子节点的关系结构,经常需要找到某个节点的根,或者某个节点的所有子节点,一般做法都是在业务层做递归的方式实现,或者数据库存储过程实现。但其实SQLServer提供的CTE可以很好的简化我们的工作,非常方便的实现这一功能。

例子:
  

1.正向递归,找某个节点下的所有子节点

with t as--如果CTE前面有语句,需要用分号隔断
(selectId,ParentId,Name
from WMS_Org whereId='2'union all select r1.Id,r1.ParentId,r1.Name from WMS_Org r1 join t as r2 on r1.ParentId= r2.Id) select*from t order byId

 

2.逆向递归,找某个节点下的上层节点,直至根节点

with t as--如果CTE前面有语句,需要用分号隔断
(selectId,ParentId,Name
from WMS_Org
where Id='9'union all
select r1.Id,r1.ParentId,r1.Name
from WMS_Org r1 join t as r2 on r1.Id= r2.ParentId)
select*from t order byId

 

仅仅是这里条件的变化哦:select r1.Id,r1.ParentId,r1.Name from WMS_Org r1 join t as r2 on r1.Id = r2.ParentId

Proc可参考:         http://www.cnblogs.com/keepfool/archive/2012/02/05/2338700.html

posted @   jackchain  阅读(579)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
点击右上角即可分享
微信分享提示