sql实际应用-递归查询
2023-09-14 09:01:07 时间
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方面的知识,案例一切以实际工作演变而来。
相关文章
- C# 系统应用之清空回收站操作
- 单体应用产生的痛苦,微服务并不能解决……
- sql server 中将由逗号“,”分割的一个字符串,转换为一个表,并应用与 in 条件
- ObjectArx学习笔记-UCS创建及应用
- IOS之Block的应用-textFeild的回调应用
- 红黑树和B+树的应用场景
- 利用 Chrome 开发者工具自带的 Memory 工具分析 Node.js 应用的内存分配情况
- 为什么在大型 Angular 应用里我们需要使用 ngrx
- AI开发者大会:2020年7月3日11:00--12:00《大咖来了之中国AI应用开发者报告》
- SQL操作:WITH表达式及其应用
- 控制台应用程序修改项目名称步骤
- 《ClickHouse企业级应用:入门、进阶与实战》6 ClickHouse SQL基础
- 分块传输编码在WEB安全中的应用——sql注入用,可以直接复用chunkSplitPostData还原
- Vue中自定义指令是什么?有哪些应用场景?
- 解开Kafka神秘的面纱(五):kafka优雅应用
- 【SQL Server】数据库开发指南(五)T-SQL 高级查询综合应用与实战