码迷,mamicode.com
首页 > 数据库 > 详细

sql实际应用-递归查询,部门递归排序

时间:2016-08-23 18:55:49      阅读:271      评论:0      收藏:0      [点我收藏+]

标签:

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

 技术分享

2、数据结构

   技术分享

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

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

    来看看CTE的写法

   

技术分享
CREATE PROC sp_getTreeById(@TreeId int)
ASBEGINWITH cteTree
        AS (SELECT *FROM TuziTree
              WHERE Id = @TreeId  --第一个查询作为递归的基点(锚点)UNION ALLSELECT 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/%‘了

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

总结:

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

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

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

  下次继续总结sql方面的知识,案例一切以实际工作演变而来。



来自为知笔记(Wiz)



sql实际应用-递归查询,部门递归排序

标签:

原文地址:http://www.cnblogs.com/yuhaizhou/p/5800412.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
分享档案
周排行
mamicode.com排行更多图片
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!