SqlServer 递归查询树形数据
来源:互联网 发布:vb radiobutton 分组 编辑:程序博客网 时间:2024/06/01 07:56
一直没有在意过数据库处理树形数据的重要性,直到有一天朋友问起我关于树形数据查询的问题时才发现根本不会,正好这个时候也要用到递归进行树形数据的查询于是在网上查了一圈,语法总结如下
参考文献:https://msdn.microsoft.com/query/dev10.query?appId=Dev10IDEF1&l=ZH-CN&k=k(WITH_TSQL);k(SQL11.SWB.TSQLRESULTS.F1);k(SQL11.SWB.TSQLQUERY.F1);k(MISCELLANEOUSFILESPROJECT);k(DevLang-TSQL)&rd=true
一:简单的树形数据 代码如下:
-- with一个临时表(括号中是你要查询的列名)with temp(ID,PID,Name,curLevel)as(--1:初始查询(这里的PID=-1 在我的数据中是最底层的根节点)select ID,PID,Name,1 as level from dbo.T_ACL_OU where Deleted = 0 and PID = -1 union all--2:递归条件select a.ID,a.PID,a.Name, b.curLevel+1from T_ACL_OU a --3:这里的临时表和原始数据表都必须使用别名,不然递归的时候不知道查询的是那个表的列inner jointemp bon ( a.PID=b.id) --这个关联关系很重要,一定要理解一下谁是谁的父节点)select * from temp --4:递归完成后 一定不要少了这句查询语句 否则会报错
效果如图:
这里要注意的地方是注释中的 1——4 的部分
二:带缩进的树形数据 代码如下:
with temp(ID,PID,Name,curLevel)as(--初始查询select ID,PID,Name,1 as curLevel from dbo.T_ACL_OU where Deleted = 0 and PID = -1 union all--递归条件select a.ID,a.PID, convert(nvarchar(100),CONVERT(nvarchar(100), REPLICATE (' ', b.curLevel+1)+a.Name)) as Name , b.curLevel+1 --这里的 REPLICATE函数非常重要,用于缩进空格用。不懂得可以在SQLserver中选中后按F1键from T_ACL_OU a inner jointemp bon ( a.PID=b.id))select ID,PID,Name,curLevel from temp
效果如图:
三:查询是否有子节点
with temp(ID,PID,HandNo,Name,curLevel,pLevel,haveChild)as(--初始查询select ID,PID,HandNo,Name,1 as level,0 as pLevel,1 as haveChild from dbo.T_ACL_OU where Deleted = 0 and PID = -1 union all--递归条件select a.ID,a.PID,a.HandNo,a.Name, b.curLevel+1,b.curLevel,haveChild = (case when exists(select 1 from T_ACL_OU where T_ACL_OU.PID=a.id) then 1 else 0 end)--(select 1 from T_ACL_OU where exists(select 1 from T_ACL_OU where a.PID=b.id)) from T_ACL_OU a inner jointemp bon ( a.PID=b.id))select * from temp order by pLevel
效果如图:
这3段代码可以直接复制使用,修改一下表名和要查询的列名基本上都是通用的,写的比较简单,如果大家有什么意见建议请留言交流谢谢。
0 0
- SqlServer 递归查询树形数据
- SqlServer 递归查询树形数据
- SqlServer 递归查询树形数据
- SqlServer 递归查询树形数据
- SqlServer 递归查询树形数据
- oracle 递归 树形结构数据查询
- sqlserver实现树形结构递归查询(无限极分类)
- sqlserver实现树形结构递归查询(无限极分类)
- sqlserver实现树形结构递归查询(无限极分类)
- sqlserver的树形查询
- SqlServer递归查询
- sqlserver 递归查询
- SQLSERVER 2005 递归查询
- SQLSERVER 2005 递归查询
- sqlserver 递归查询
- sqlserver递归查询
- SqlServer递归查询
- SQLServer 递归查询
- ViewPager 设置滑动翻页距离(亲测有效!)
- Cocos2d-x下Lua调用自定义C++类和函数的最佳实践
- Docker学习笔记三:运行容器
- spark与storm比对与选型
- 【Unity&按键设置】按下任意按键,返回按键的名称
- SqlServer 递归查询树形数据
- Python爬虫——DNS解析缓存
- WebRTC学习之ICE深入理解
- pat a1006
- Linux编程里getopt_long_only函数用法详解
- 机器学习笔记 - Logistic Regression
- Linux驱动技术(四) _异步通知技术
- Java容器(十):subList的陷阱
- Android 自定义广播实例以及系统广播(基础)(二)