使用SqlServer CTE递归查询处理树、图和层次结构
作者:mrr 发布时间:2024-01-16 07:35:42
CTE(Common Table Expressions)是从SQL Server 2005以后版本才有的。指定的临时命名结果集,这些结果集称为CTE。 与派生表类似,不存储为对象,并且只在查询期间有效。与派生表的不同之处在于,CTE 可自引用,还可在同一查询中引用多次。使用CTE能改善代码可读性,且不损害其性能。
递归CTE是SQL SERVER 2005中重要的增强之一。一般我们在处理树,图和层次结构的问题时需要用到递归查询。
CTE的语法如下
WITH CTE AS
(
SELECT EmpId, ReportTo, FName FROM Employ WHERE EmpId=
UNION ALL
SELECT emp.EmpId, emp.ReportTo, emp.FName FROM CTE JOIN Employ as emp ON CTE.EmpId=emp.ReportTo
)递归CTE最少包含两个查询(也被称为成员)。第一个查询为定点成员,定点成员只是一个返回有效表的查询,用于递归的基础或定位点。第二个查询被称为递归成员,使该查询称为递归成员的是对CTE名称的递归引用是触发。在逻辑上可以将CTE名称的内部应用理解为前一个查询的结果集。
递归查询没有显式的递归终止条件,只有当第二个递归查询返回空结果集或是超出了递归次数的最大限制时才停止递归。是指递归次数上限的方法是使用MAXRECURION。
USE AdventureWorks;
GO
--Creates an infinite loop
WITH cte (EmployeeID, ManagerID, Title) as
(
SELECT EmployeeID, ManagerID, Title
FROM HumanResources.Employee
WHERE ManagerID IS NOT NULL
UNION ALL
SELECT cte.EmployeeID, cte.ManagerID, cte.Title
FROM cte
JOIN HumanResources.Employee AS e
ON cte.ManagerID = e.EmployeeID
)
--Uses MAXRECURSION to limit the recursive levels to
SELECT EmployeeID, ManagerID, Title
FROM cte
OPTION (MAXRECURSION );
GO
以上内容就是本文给大家介绍的使用SqlServer CTE递归查询处理树、图和层次结构,希望大家喜欢。
猜你喜欢
- 前言做数据分析的时候通常我们并不是对真个excel文件进行操作,换言之,每一列都是一个特征,我们需要针对分析。遇到这类问题的时候,我们通常想
- order by 查询语句使用也是非常频繁,有时候数据量大了会发现排序查询很慢,本文就介绍一下 MySQL 是如何进行排序的,以及如何利用其
- SQL Server 2019 Enterprise (x64) - DVD (Chinese-Simplified)企业版ed2k://|
- 这里主要是讲在asp下两次由access数据库升级到sql server数据库后的经验及注意事项,其它语言也可以参考一下。欢迎讨论补充。1.
- 从这次开始,我会由简单到困难(其实也不会困难到哪里去)讲几个例程,每一个例程都是我自己写(或者修改,那样的话我会提供原始出处)的,都具有一定
- python 数据的清理行为实例详解数据清洗主要是指填充缺失数据,消除噪声数据等操作,主要还是通过分析“脏数据”产生的原因和存在形式,利用现
- 目标学习读取视频,显示视频和保存视频。学习从相机捕捉并显示它。你将学习以下功能:cv.VideoCapture(),cv.VideoWrit
- 在学习使用Python的过程中,一定会遇到文字输入与处理,这就不可避免的会使用中文字符。但是Python2.7默认使用的字符集是ASCII,
- 02条件语句和while循环三目运算a = 6#原判断语句if a > 5:print(True)else:print(False)#
- 前言9月份,开始开发微信小程序,也曾调研过wepy/mpvue,考虑到后期跨端的需求,最终选择使用了uni-app,本文主要介绍如何使用un
- 本文实例讲述了MySQL主从复制与读写分离原理及用法。分享给大家供大家参考,具体如下:主从复制概念影响MySQL-A数据库的操作,在数据库执
- php遍历一个文件夹内的所有文件和文件夹,并删除所有文件夹和子文件夹下的所有文件的代码,通过递归方式实现达到清空一个目录的效果,代码简单实用
- 步骤:1.从php.net上面下载php5.3.x版本的源码;2.centos安装相应的扩展包:yum install libmcrypt
- 阅读上一篇:javascript面向对象编程(二) [Interface,Class.implement 接口及实现]接口规定了一些方法,如
- 本文实例为大家分享了python实现图片转字符画的具体代码,供大家参考,具体内容如下源码(注释很详细):# -*- coding=utf-8
- 不说什么,先上代码这里先求解形如的微分方程1.欧拉法def eluer(rangee,h,fun,x0,y0):
- 本文实例讲述了python获取文件后缀名及批量更新目录下文件后缀名的方法。分享给大家供大家参考。具体实现方法如下:1. 获取文件后缀名:#!
- 听歌识曲,顾名思义,用设备“听”歌曲,然后它要告诉你这是首什么歌。而且十之八九它还得把这首歌给你播放出来。这样的功能在QQ音乐等应用上早就出
- 在sql语句中,我们难免会用到单引号嵌套的时候,但是直接嵌套肯定是不行的,java中用反斜杠做转义符也是不行的,在sql中是用单引号来做转义
- 前言SQL Server 是数据库软件中比较常见且实用的软件,它的集成度很高,且功能非常强大。很多类型的网站系统后台数据库都依赖于SQL S