博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
sql 递归查询
阅读量:5125 次
发布时间:2019-06-13

本文共 785 字,大约阅读时间需要 2 分钟。

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

 

2、数据结构

   

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

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

    来看看CTE的写法

   

CREATE PROC sp_getTreeById(@TreeId int)ASBEGIN 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方面的知识,案例一切以实际工作演变而来。

转载于:https://www.cnblogs.com/nxxshxf/p/5590923.html

你可能感兴趣的文章
electron知识点
查看>>
字符串json转换为xml xml转换json
查看>>
C#多线程编程
查看>>
投资股权众筹项目,至少需要关注6个方面
查看>>
网站开发和企业级开发有什么区别?
查看>>
北漂周记--第2记--培训开始
查看>>
一个伟大计划终于完成了(粉丝联盟网正式上线了)
查看>>
设计模式 学习笔记(2)单一职责原则、开放封闭原则、依赖倒转原则
查看>>
Thread类和Runnable接口
查看>>
【Vue】【Router】手动跳转用 this.$router.push() 时 $router 未定义的问题
查看>>
方法的重载(overload)和重写(override)的区别
查看>>
iReport报表工具的使用
查看>>
hdoj-3342-Legal or Not(拓扑排序)
查看>>
第三章 使用属性升级MyBank
查看>>
Linux实用指令
查看>>
Linux软链接和硬链接
查看>>
可持久化线段树学习笔记
查看>>
System
查看>>
mac下用xattr命令来删除文件的扩展属性
查看>>
jQ实现JSON.stringify(obj)方法
查看>>