前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >sql server递归查询

sql server递归查询

作者头像
跟着阿笨一起玩NET
发布2018-09-20 15:33:52
1.9K0
发布2018-09-20 15:33:52
举报

1、既然要谈到sql,数据库表是必须的

2、数据结构

3、获取某个节点的所有子节点

    传统的写法(sql2000) 很麻烦,暂且就不写了

    来看看CTE的写法

代码语言:javascript
复制
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

  测试一下啊  

代码语言:javascript
复制
 exec  sp_getTreeById  @TreeId=1001                          

结果

-----------------------------------------------

4、使用节点路径来做(每个节点路径都保存自身的路径和所有父节点的路径=自己和所有父节点的关联)

5、既然有个路径

  那么查询其所有子节点 只需要 where nodePath like '/1001/%'了

  这样就会简单很多,加上索引。

总结:

如果在性能的需要上,我们可以采用按需加载,点击节点时候 才会加载其所有子节点。

  如果在变化不大的情况下,可以采用缓存 。这样的处理 可以满足很多业务需求。

  良好的表设计会给后期的开发以及需求变化 带来更多的便利。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-03-19 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档