SqlServer 递归查询树形数据

一直没有在意过数据库处理树形数据的重要性,直到有一天朋友问起我关于树形数据查询的问题时才发现根本不会,正好这个时候也要用到递归进行树形数据的查询于是在网上查了一圈,语法总结如下

参考文献: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 join
temp b
on ( 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 join
temp b
on ( 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 join temp b on ( a.PID=b.id) ) select * from temp order by pLevel

效果如图:

这3段代码可以直接复制使用,修改一下表名和要查询的列名基本上都是通用的,写的比较简单,如果大家有什么意见建议请留言交流谢谢。

 

http://www.cnblogs.com/Lixinhua-GoOn/archive/2016/01/29/5169297.html

转载于:https://www.cnblogs.com/railgunman/p/6705704.html

二叉树的递归算法:建立二叉树、遍历二叉树.doc 二叉树的递归算法:建立二叉树、遍历二叉树 立即下载

相关推荐

总结-NuerIPS2023-Direct Preference Optimization:Your Language Model is Secretly a Reward Model

对比PPO,DPO的泛化能力更强。

m0_60361484的博客 1606

SQLSERVER 树级递归查询

-- with一个临时表(括号中是你要查询的列名) with temp(subject_id,parent_id,Name,curLevel)as (--1:初始查询(这里的PID=-1 在我的数据中是最底层的根节点) select subject_id,parent_id,Name,1 as level from Subject where parent_id = 1 union ...

zg97zb的博客 552

【一文读懂】NTN(非地面网络)技术介绍

NTN,即非地面网络,是指利用卫星、高空平台(如无人机、平流层气球等)等非地面通信基础设施来实现全球通信覆盖的网络。在5G时代,NTN主要基于5G标准,特别是5G NR(New Radio)技术,通过卫星通信扩展地面网络的覆盖范围和服务能力。NTN技术的出现和发展,为全球通信带来了新的可能性和挑战。通过不断的技术创新和标准化推进,NTN有望在未来发挥更加重要的作用,为全球用户提供无处不在的通信服务。随着6G时代的到来,我们有理由相信NTN技术将迎来更加广阔的发展前景。

u011376987的博客 1万+

sqlserver的树形查询

SQL Server没有ORACLE那样专门的树形查询语法,而这却是很多数据库模型中要用到的,比如主机结构,产品分类等。 我查询了很多资料没有一个满意的,基本有3中方案: 1. 简单的带with的递归查询,无法排序,更加无法显示体系架构 2 使用ROW_NUMBER()over功能,比较完美,但某些极端情况不能工作,复杂难懂 3 老外有存储过程来实现,很完美,但建立新的对象很不爽 我

codepython的专栏 3425

从ADRV9002到ADRV9003:手把手教你移植FPGA驱动,避开那些官方没说的坑

本文详细介绍了从ADRV9002到ADRV9003的FPGA驱动移植实战指南,重点解析了两者在硬件架构上的关键差异,如通道配置和DPD功能的移除。通过提供完整的移植步骤、调试技巧和性能优化建议,帮助工程师避开官方文档未提及的常见陷阱,实现高效驱动开发。

weixin_28738397的博客 175

零中频架构实战:用Matlab模拟AD9361收发信号(附完整代码)

本文详细介绍了如何使用Matlab模拟AD9361射频收发器的零中频架构,解决镜像干扰等关键挑战。通过完整的代码示例和系统级建模方法,帮助工程师掌握RFIC设计中的自适应校准算法和性能优化技巧,特别适用于SDR系统开发。

weixin_30733003的博客 541

浅谈sql server索引结构

我们都知道sqlserver数据行的存储结构有两种:堆()

u014524247的专栏 1595

STM32F103跑LVGL,用DMA加速刷屏,800*480大屏也能丝滑

本文详细介绍了如何在STM32F103芯片上通过DMA加速和内存优化,实现800*480大屏的LVGL流畅运行。通过FSMC+DMA硬件架构优化、双缓冲机制和LVGL参数调优,显著提升了界面刷新率和响应速度,适用于嵌入式GUI开发中的高性能需求场景。

weixin_30357231的博客 376

SqlServer 递归查询树

这3段代码可以直接复制使用,修改一下表名和要查询的列名基本上都是通用的。1、简单的树形结构代码。2、带缩进的树形机构。3、查询是否有子节点。

书中自有妍如玉的博客 875

ElectrolyteGPT:首个电池电解液逆向设计的生成式 AI 系统 —— 算法原理与复现解析

数据驱动的重要性:1100 万→100 万的精心筛选,比单纯增大模型更有效领域适配:fLine 表示法、正则分词、化学感知的数据增强(SMILES randomization)都是关键小模型的力量:6M 参数在特定化学空间的表现,远超通用大模型在相同任务上的零样本能力条件生成的极限:10 维条件导致模型崩溃,提示我们需要更好的条件编码策略(如 diffusion guidance、RLHF-style 偏好优化)未来方向配方实验验证。

ASKCOS博客 123

但是我如果真的用差速轮去控制转向 为了尽量原地旋转 转向角度精确 我应该怎么去配置左右两个轮子的速度呢

目标实现方式原地转向左右轮速度相等、方向相反精确角度用 IMU 检测 yaw 实时对齐停止判断达到目标 yaw ± 容差时立即停转控制方式状态机(idle → turning → done)推荐容差2°~3° (可根据实际调整)

qqqweiweiqq的博客 312

sqlserver中一个表中树形结构递归数据查询

需求:一个数据表是树形结构,即id,pid,每条记录会有自己的父级记录。现在要一下把指定记录以及该记录为父级时,所有下级层级记录查询出来。 解决:这里面用到了sqlserver的with as语句以及union all合并 WITH Emp AS ( SELECT * FROM dbo.Users WHERE ID = '111'

四点的博客 2658

多径衰落信道的 MATLAB 仿真

在无线通信系统中,信号在传输过程中会经历多径传播现象,导致信号在接收端出现时域和频域上的扩展。通过以上示例代码,我们可以进行多径衰落信道的 MATLAB 仿真。同时,我们还可以通过调整信道参数和信号特性,进一步研究多径衰落对系统性能的影响。常用的模型之一是瑞利衰落信道模型,它假设信号在传输过程中受到多个散射路径的影响。除了瑞利衰落信道模型,我们还可以使用其他类型的信道模型,如高斯衰落信道模型。在上述代码中,我们首先定义了信道的参数,包括最大多普勒频移、多径延迟和多径功率衰落。函数来模拟高斯衰落信道。

TechCraze的博客 665

SqlServer 递归查询树形数据

一直没有在意过数据库处理树形数据的重要性,直到有一天朋友问起我关于树形数据查询的问题时才发现根本不会,正好这个时候也要用到递归进行树形数据的查询于是在网上查了一圈,语法总结如下 参考文献:https://msdn.microsoft.com/query/dev10.query?appId=Dev10IDEF1&l=ZH-CN&k=k(WITH_TSQL);k(SQL11.SWB....

weixin_30682127的博客 919

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

SqlServer 递归查询树形数据(转载)

原文地址:https://www.cnblogs.com/Lixinhua-GoOn/archive/2016/01/29/5169297.html一直没有在意过数据库处理树形数据的重要性,直到有一天朋友问起我关于树形数据查询的问题时才发现根本不会,正好这个时候也要用到递归进行树形数据的查询于是在网上查了一圈,语法总结如下参考文献:https://msdn.microsoft.com/query/...

csdn296 1961

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

SqlServer递归查询树形结果数据

SQL语法:WithtempAs( Select*FromSYS_Menua UnionAll Selectb.*FromSYS_Menub innerJointemptOnb.ParentID=t.ID)Select*Fromtemp;查询结果如下图:

Quber 467

SQLServer 递归查询

--SQLServer 递归查询,主要用于建立树形结构 IF OBJECT_ID('Categories') IS NOT NULL DROP TABLE Categories GO CREATE TABLE Categories ( CategoryID INT, CategoryName VARCHAR(20), ParentID INT ) GO IN

语不惊人死不休 2339

mysql多表树形结构递归实现_在ORACLE、MSSQL、MYSQL中树结构表递归查询的实现方法...

表recursion数据如下:id name parentid1 食品分类 -12 肉类 13 蔬菜类 14 产品分类 -15 保健品 46 医药 47 建筑 4...

weixin_42119989的博客 320

SqlServer 树形结构查询

SqlServer树形结构查询

YYZ_YZ的博客 2071
上一篇: FastReport 变量列表使用
下一篇: CreateMutex和WaitForSingleObject组合的有关问题
aowo7144
博客等级 码龄10年 5粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值