zoukankan      html  css  js  c++  java
  • 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/%'了

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

    总结:

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

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

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

  • 相关阅读:
    全排列和几道例题
    NOJ1333: [蓝桥杯2017初赛]Excel地址
    力扣5-最长回文子串-(Manacher算法)
    CF1003E-Tree Constructing-(构造+dfs)
    NOJ1329:[蓝桥杯2017初赛]k倍区间-(前缀和)
    Java 时间
    小魂和他的数列-(离散+二分+树状数组)
    AC自动机入门和几道例题
    java写入加速
    清理 Excel 导出的 HTML 的多余属性
  • 原文地址:https://www.cnblogs.com/zhaoshujie/p/9594699.html
Copyright © 2011-2022 走看看