博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
在T-SQL中用队列来遍历层级数据
阅读量:6977 次
发布时间:2019-06-27

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

    前几天看了《The Guru's Guide To Transact SQL》(中文翻译是Transact-SQL 权威指南),里面介绍的一个查询是关于层级结构的,处理的方式本质就是队列,遍历的结果就像遍历二叉树的中先序遍历,很有趣。

待查询的表结构如下:

    每个层节点都分配一个唯一的ID、节点的名称、上一个父节点的ID。现在,要做的是查找指定节点ID下所有的子节点,比如对于ID为3的节点来说,它的查询结果ID 集为{5,6,7,8,9,10,11,12,13}。下面就是关键了,写了个存储过程,方便重用。

简单介绍下它的原理,首先,将自身加载到队列中,初始化队列。每次都从队列中弹出一个值,并把值写入到结果集中,再把属于值的子节点塞到队列中。如果成功塞入,就进入下一个层级,很类似于遍历树形结构使用队列处理的情况。在处理队列时,如果发现当前层以没有元素需要处理了,则返回处理它的上一层,就是语句IF EXISTS(SELECT * FROM #queue where lvl=@lvl) BEGIN。。。END ELSE SET @lvl = @lvl-1,也是退出WHILE循环的条件。

下面看看执行的结果:

总结一下,TSQL是相当灵活的,很多数据结构中的算法都可以结合表来实现,最后实现的语句虽然复杂了点,不过效率一般较高。发帖辛苦,请支持下。

demo的sql语句:

转载于:https://www.cnblogs.com/ProJKY/archive/2013/05/12/tsqlqueue.html

你可能感兴趣的文章
大数据流通存隐忧 产业信任体系亟待建立
查看>>
WebGL初探
查看>>
数据中心建设“优劣”在于这几个关键问题
查看>>
微软在慕尼黑设立欧洲首个物联网实验室
查看>>
逆变器的技术创新 让光伏电站更具发展前景
查看>>
光伏电价断崖式下跌 企业遭遇成长烦恼
查看>>
新型智能电视攻击,9成国外设备或受影响
查看>>
数据中心节能大法 —— 尽在上海11月中国数据中心展
查看>>
《关系营销2.0——社交网络时代的营销之道》一T表示Technology(技术)
查看>>
《防患未然:实施情报先导的信息安全方法与实践》——3.3 攻击剖析
查看>>
《CCNP TSHOOT 300-135认证考试指南》——2.2节故障检测与排除及网络维护工具箱
查看>>
2016 只剩最后一个月 你的 "技术债务" 还清了吗?
查看>>
使用 HTML5 时如何改进移动 Web 应用开发
查看>>
《树莓派Python编程指南》——2.3 小结
查看>>
《Adobe After Effects CC经典教程》——导读
查看>>
《21世纪机器人》一一第1章 他用自己的思想打造机器人
查看>>
《Unity着色器和屏幕特效》——2.2 进阶的透明效果
查看>>
《Adobe Premiere Pro CC经典教程(彩色版)》——2.2 建立项目
查看>>
初级Java程序员所面临的4大挑战
查看>>
《算法基础:打开算法之门》一1.5 拓展阅读
查看>>