sql实际应用-递归查询
2023-09-14 08:59:23 时间
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方面的知识,案例一切以实际工作演变而来。
相关文章
- CDN网站防护与Worker无服务器应用构建
- LDAP客户端认证配置与应用接入
- 中的应用Oracle数据库中的SQL语句使用指南(sql语句在oracle)
- 让Oracle SQL脱颖而出——性能优化实现(oracle的sql优化)
- 一键实现:SQL数据转换到Oracle的神器(sql转oracle工具)
- Redis与Lua在操作系统中的应用(redisluaos)
- Oracle中SQL技术的应用(oracle中sql)
- Oracle数据库触发器的类型及其应用(oracle触发器类型)
- SQL如何转换成MySQL,易学易用(sql转换成mysql)
- MySQL学习笔记:如何通过SQL语句增加字段?(mysql增加字段sql)
- SQL导入Oracle快速指南(sql导入oracle)
- SQL Server数据库 中日期减法实现及应用(日期减sqlserver)
- SQL Server中行号实现原理及应用(sqlserver的行号)
- 结构SQL Server数据库的层级结构及应用(sqlserver 层级)
- 如何使用MySQL添加SQL文件:一步步指南(mysql添加sql文件)
- MySQL如何创建及使用SQL文件(mysql创建sql文件)
- SQL Server中全局表的实际应用(sqlserver全局表)
- MSSQL实现SQL注入防护的完美解决方案(mssql 防sql注入)
- 探究Oracle事务的概念及其应用(oracle事务的含义)
- Oracle中SQL的分类与应用(oracle中sql分类)
- Oracle SQL实战从初学者到专家(oracle sql实战)
- Oracle SQL中的加法运算指南(oracle sql加法)
- Oracle SQL中使用别名的优势(oracle sql别名)