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

使用递归SQL实现树形参数的转换(后传前) 递归 SQL(Recursive SQL)是一种 SQL 查询语言的扩展,它允许在查询中使用递归算法。递归 SQL 通常用于处理树形结构或层次结构数据,例如组织结构、产品分类、地理位置等。递归部分定义了如何从一个节点到达下一个节点,而终止部分定义了递归何时结束。递归 SQL 语句通常使用关键字来定义在于它可以处理复杂的层次结构数据,而不需要编写复杂的程序或使用循环语句存在性能、内存、可读性和数据一致性(多线程或分布式情况下)等问题。 阅读详情

原文地址:https://www.cnblogs.com/Lixinhua-GoOn/archive/2016/01/29/5169297.html

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

参考文献: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段代码可以直接复制使用,修改一下表名和要查询的列名基本上都是通用的,写的比较简单,如果大家有什么意见建议请留言交流谢谢。


部分普通sql查询在hive中的实现方式 部分普通sql查询在hive中的实现方式详细说明; 立即下载

相关推荐

(三)从零开始学习模糊控制——模糊决策

模糊控制之基础——模糊数学 (一)模糊数学——基本概念 (二)模糊数学——模糊关系 (三)模糊数学——模糊决策 文章目录模糊控制之基础——模糊数学前言一、模糊决策法1.最大值原理2.模糊排序2.模糊寻优总结 前言   模糊决策是指在模糊环境下进行决策的数学理论和方法。这类问题─般具有大系统特征,系统之间的关系十分复杂,存在不能准确赋值的变量,这些变量属于模糊因素,涉及到一定的主观因素,使得子系统之间、变量之间的关系不清晰,从而必须借助排序、模糊评判等方法来进行处理。 一、模糊决策

qq_43667552的博客 4750

SqlServer 递归查询树形数据

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

weixin_30682127的博客 919

FPGA DMA IP核使用指南

数据传输:支持从源地址到目标地址的数据传输。中断管理:提供中断信号,便于CPU处理传输完成事件。传输控制:支持传输大小、方向和暂停/恢复控制。

weixin_66634995的博客 2428

hive实现树形结构展开

结果样式 -- sql原q SELECT SYS_CONNECT_BY_PATH(T.C_AREANAME, '-->') AS RESULT, T.C_AREACODE, T.C_AREANAME, T.C_PARENTCODE, LEVEL FROM CRM_TAREAINFOTREE T START WITH T.C_AREACODE = '0001' CONNECT BY PRIOR T.C_AREACODE = T.C_PARENTCODE ORDE

weixin_44847293的博客 3608

交换机基本介绍(分类、性能指标、硬件构成及工作方式)

一、交换机的分类与性能指标 1.1交换机的分类 按照网络构成方式来分的话,交换机分为三类:接入层交换机、汇聚层交换机和核心层交换机。 按照OSI模型来划分的话,分为:二层交换机、三层交换机和四层交换机 还有一种按照硬件形态来划分,可以分成两类:盒式交换机和机框式交换机。 盒式交换机是一种有固定端口数,有时也会带有少量扩展槽的交换机。机架式交换机是一种插槽式的交换机,这种交换机扩展性较好,可支持不同的网络类型,可支持更大端口密度的网络。一般在数据中心的接入层都会采用盒式交换机,盒式...

monologuezjp的博客 4万+

深度学习、图像分类入门,从VGG16卷积神经网络开始

刚开始接触深度学习、卷积神经网络的时候非常懵逼,不知道从何入手,我觉得应该有一个进阶的过程,也就是说,理应有一些基本概念作为奠基石,让你有底气去完全理解一个庞大的卷积神经网络: 本文思路: 一、我认为学习卷积神经网络必须知道的几个概念: 1、卷积过程:   我们经常说卷积神经网络卷积神经网络,到底什么才是卷积?网络层卷积过程到底怎么实现?我们在这里借鉴了另一位博客大牛的动态图来给大

Errors_In_Life的博客 16万+

Hive/MySQL/Flink 中对树结构/递归计算的处理

文章目录一.数据源:二.需要结果:三.hive sql四. 输出结果 一.数据源: id,city,parentId 1,北京市,0 2,山东省,0 3,昌平区,1 4,海淀区,1 5,沙河镇,3 6,马池口镇,3 7,中关村,4 8,上地,4 9,烟台市,2 10,青岛市,2 11,单平区,9 12,芝果区,9 13,即墨区,10 14,城阳,10 注意: 一个id 唯一对应一个ParentId 一个ParentId可以对应多个id 二.需要结果: 一级 二级 三级 0

lihuazaizheli的博客 2153

【线粒体基因组数据提交实战】从注释校验到GenBank批量入库的避坑指南

本文详细介绍了线粒体基因组数据从注释校验到GenBank批量上传的全流程避坑指南。重点解析了GB2sequin工具的正确使用方法、TBL注释文件的精修技巧,以及BankIt平台提交的隐藏要点,帮助科研人员高效完成NCBI数据提交,特别适合需要批量上传线粒体基因组数据的研究者。

weixin_28726671的博客 442

SqlServer 递归查询树形数据

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

131

Multisim电路仿真与实验:包含连续时间系统的模拟、周期信号频谱分析、组合逻辑电路:竞争冒险、数字锁

这些实际系统可以是电的或非电的物理量系统,也可以是经济、军事等非物理量系统。矩形周期信号的幅度和周期保持不变,随着占空比的增加(即脉宽加大),主峰高度越高,主峰宽度越窄,各谱线间隔越窄,主峰包含的谱线数量越少,有效频带宽度越窄,主峰内高次谐波分量越少。输入信号所经路径不同而引起的冒险现象,按短暂尖峰极性的不同,可将冒险分为“0-1-0”型险象(也称“1”型)和“1-0-1”型险象(也称“0”型)理想的正弦波的幅度谱包含1条谱线,证明其只有基频分量,而无谐波分量,如果能测出谐波分量,说明该正弦波已有失真。

Jumpingtigger_35的博客 1万+

2024年 Flutter 面试题大全(2024.6.28持续更新中)

2024年 Flutter 面试题大全(持续更新中)

Code Metaverse 6665

oracle 树形结构表,树结构表递归查询在ORACLE和MSSQL中的实现方法

树结构表:记录树形数据的二维数据表,包含"本节点ID”和"父节点ID"经常需要进行递归查询某个节点下的所有节点数据以下是分别在ORACLE和MSSQL中的实现如本例子中涉及的表TB_SM_ORGAN(ORG_ID int,ORG_CODE varchar(20),ORG_NAME varchar(40),IS_INITDATA char(1),ORG_PARENTID int,ORG_TYPEID...

weixin_33420201的博客 258

【大数据技术干货】(还不懂数仓,数据中心?看这一篇就够了!)在实际的开发生产中,让你了解企业级数据中心整体架构(DB+ETL+ODS+DW+DM)的各个层次的过程详解,数据联系及功能区分

一 企业级数据中心架构 数据仓库的整体架构,各个系统的元数据通过ETL同步到操作性数据仓库ODS中,对ODS数据进行面向主题域建模形成DW(数据仓库),DM是针对某一个业务领域建立模型,具体用户(决策层)查看DM生成的报表。 二 DB 三 ETL(Extract-Transform-Load) ETL是将业务系统的数据经过抽取、清洗转换之后加载到数据仓库的过程,目的是将企业中的分散、零乱、标准不统一的数据整合到一起,为企业的决策提供分析依据。 ETL是BI项目重要的一个环节。 通常情况下,在BI项目中ET

liuchunhang的博客 1288

sqlserver实现树形结构递归查询(无限极分类)

找到一篇好文,真的解决了很多问题 转载自:https://blog.youkuaiyun.com/jethai/article/details/52345361 SQL Server 2005开始,我们可以直接通过CTE来支持递归查询,CTE即公用表表达式 百度百科 公用表表达式(CTE),是一个在查询中定义的临时命名结果集将在from子句中使用它。每个CTE仅被定义一次(但在其作用域内可以被引用任意次...

qq_36350477的博客 896

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

SQLServer 递归查询

SQLServer 递归查询,主要用于建立树形结构

大龄程序员 1712

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

SQL Server 树形表非循环递归查询

SQL Server 树形表非循环递归查询 很多人可能想要查询整个树形表关联的内容都会通过循环递归来查...事实上在微软在SQL2005或以上版本就能用别的语法进行查询,下面是示例。 --通过子节点查询父节点 WITH TREE AS( SELECT * FROM Areas WHERE id = 6 -- 要查询的子 id UNION ALL ...

weixin_34310785的博客 124

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

[转]树结构表递归查询在ORACLE和MSSQL中的实现方法

树结构表:记录树形数据的二维数据表,包含"本节点ID”和"父节点ID" 经常需要进行递归查询某个节点下的所有节点数据 以下是分别在ORACLE和MSSQL中的实现 如本例子中涉及的表 TB_SM_ORGAN( ORG_ID int, ORG_CODE varchar(20), ORG_NAME varchar(40), IS_INITDATA...

weixin_30598225的博客 102

SQL Server 树形表非循环递归查询(转载)

原文地址:http://www.cnblogs.com/cracker/archive/2012/07/07/2580781.html 很多人可能想要查询整个树形表关联的内容都会通过循环递归来查...事实上在微软在SQL2005或以上版本就能用别的语法进行查询,下面是示例。--通过子节点查询父节点 WITH TREE AS( SELECT * FROM tstructure ...

csdn296 248

查询树形的根节点

数据库环境:SQL SERVER 2005   有一个test表,其表结构及数据如下图1。其中,id是主键,mid是当前节点,pid是父节点。 要求:查出每个节点的根节点,如图2所示。   分析:这需求实际上树形查询的扩展,我们可以先找到根节点,从根节点往下找到分支节点, 再从分支节点往下找叶子节点。   1.数据准备 WITH x0 ...

weixin_30719711的博客 728

SQLServer -- 递归查询树结构表

需求 查询树结构表(如菜单类型表,文件夹类型表等)中一个数据节点下所有的子节点数据 声明临时表,并写入数据如下 DECLARE @tbl TABLE ( Id INT ,ParentId INT ,Name VARCHAR(50) ) INSERT INTO @tbl( Id, Name, ParentId ) VA...

weixin_34198881的博客 393

树形查询扩展

数据库环境:SQL SERVER 2005   有一层次表的数据如下图1,要实现图2的效果,即将层次结构的路径按行显示, 第一列显示的是叶子节点,后面则是分枝节点,最后是根节点。   要解决的问题:   1.递归实现树形查询 2.从根节点到叶子节点编成一组   3.动态行转列   好了,我们依次来解决这些问题。   0.建表,导入基础数据 ...

weixin_30256505的博客 136

SQLserver2008使用表达式递归查询

--由父项递归下级 with cte(id,parentid,text) as ( --父项 select id,parentid,text from treeview where parentid = 450 union all --递归结果集中的下级 select t.id,t.parentid,t.text from treeview as t inner join cte ...

weixin_30344995的博客 109
上一篇: SQL Server遍历表的几种方法(转载)
下一篇: DNS 缓存查看以及清除(转载)
csdn296
博客等级 码龄9年 20粉丝 9原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值