sql server递归查询
1、既然要谈到sql,数据库表是必须的
2、数据结构
3、获取某个节点的所有子节点
传统的写法(sql2000) 很麻烦,暂且就不写了
来看看CTE的写法
CREATE PROC sp_getTreeById(@TreeId int) AS BEGIN WITH cteTree AS (SELECT * FROM TuziTree WHERE Id = @TreeId --第一个查询作为递归的基点(锚点) UNION ALL SELECT TuziTree.* --第二个查询作为递归成员, 下属成员的结果为空时,此递归结束。 FROM cteTree INNER JOIN TuziTree ON cteTree.Id = TuziTree.ParentId) SELECT * FROM cteTree END
测试一下啊
exec sp_getTreeById @TreeId=1001
结果
-----------------------------------------------
4、使用节点路径来做(每个节点路径都保存自身的路径和所有父节点的路径=自己和所有父节点的关联)
5、既然有个路径
那么查询其所有子节点 只需要 where nodePath like '/1001/%'了
这样就会简单很多,加上索引。
总结:
如果在性能的需要上,我们可以采用按需加载,点击节点时候 才会加载其所有子节点。
如果在变化不大的情况下,可以采用缓存 。这样的处理 可以满足很多业务需求。
良好的表设计会给后期的开发以及需求变化 带来更多的便利。
作者:阿笨
【官方QQ一群:跟着阿笨一起玩NET(已满)】:422315558
【官方QQ二群:跟着阿笨一起玩C#(已满)】:574187616
【官方QQ三群:跟着阿笨一起玩ASP.NET(已满)】:967920586
【官方QQ四群:Asp.Net Core跨平台技术开发(可加入)】:829227829
【官方QQ五群:.NET Core跨平台开发技术(可加入)】:647639415
【网易云课堂】:https://study.163.com/provider/2544628/index.htm?share=2&shareId=2544628
【腾讯课堂】:https://abennet.ke.qq.com
【51CTO学院】:https://edu.51cto.com/sd/66c64
【微信公众号】:微信搜索:跟着阿笨一起玩NET