sql实际应用-递归查询_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > sql实际应用-递归查询

sql实际应用-递归查询

 2015/1/25 15:15:12  zhangjf_兔子  程序员俱乐部  我要评论(0)
  • 摘要:1、既然要谈到sql,数据库表是必须的2、数据结构3、获取某个节点的所有子节点传统的写法(sql2000)很麻烦,暂且就不写了来看看CTE的写法CREATEPROCsp_getTreeById(@TreeIdint)ASBEGINWITHcteTreeAS(SELECT*FROMTuziTreeWHEREId=@TreeId--第一个查询作为递归的基点(锚点)UNIONALLSELECTTuziTree.*--第二个查询作为递归成员,下属成员的结果为空时,此递归结束
  • 标签:应用 SQL 实际应用 递归

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/%'了

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

总结:

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

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

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

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

上一篇: 沃尔玛推出低价流媒体棒Vudu Spark 下一篇: 没有下一篇了!
发表评论
用户名: 匿名