首页 数据库 mysql教程 使用公用表表达式的递归查询

使用公用表表达式的递归查询

Jun 07, 2016 pm 03:56 PM
使用 引入 微软 查询 表达式 递归

微软从SQL2005起引入了CTE(Common Table Expression)以强化T-SQL。 公用表表达式 (CTE) 具有一个重要的优点,那就是能够引用其自身,从而创建递归 CTE。递归 CTE 是一个重复执行初始 CTE 以返回数据子集直到获取完整结果集的公用表表达式。 当某个查询引用递

  微软从SQL2005起引入了CTE(Common Table Expression)以强化T-SQL。

  公用表表达式 (CTE) 具有一个重要的优点,那就是能够引用其自身,从而创建递归 CTE。递归 CTE 是一个重复执行初始 CTE 以返回数据子集直到获取完整结果集的公用表表达式。

  当某个查询引用递归 CTE 时,它即被称为递归查询。递归查询通常用于返回分层数据,例如:显示某个组织图中的雇员或物料清单方案(其中父级产品有一个或多个组件,而那些组件可能还有子组件,或者是其他父级产品的组件)中的数据。

  递归 CTE 可以极大地简化在 SELECT、INSERT、UPDATE、DELETE 或 CREATE VIEW 语句中运行递归查询所需的代码。在 SQL Server 的早期版本中,递归查询通常需要使用临时表、游标和逻辑来控制递归步骤流。有关公用表表达式的详细信息,请参阅使用公用表表达式。

伪代码和语义

————————————————————————————

递归 CTE 结构必须至少包含一个定位点成员和一个递归成员。以下伪代码显示了包含一个定位点成员和一个递归成员的简单递归 CTE 的组件。

WITH cte_name ( column_name [,...n] )

AS

(

CTE_query_definition –- Anchor member is defined.

UNION ALL

CTE_query_definition –- Recursive member is defined referencing cte_name.

)

-- Statement using the CTE

SELECT * FROM cte_name

递归执行的语义如下:

  1. 将 CTE 表达式拆分为定位点成员和递归成员。
  2. 运行定位点成员,创建第一个调用或基准结果集 (T0)。
  3. 运行递归成员,将 Ti 作为输入,将 Ti+1 作为输出。
  4. 重复步骤 3,直到返回空集。
  5. 返回结果集。这是对 T0 到 Tn 执行 UNION ALL 的结果。

    示例

    ————————————————————————————

    原表:

    \

     现在有一个需求,要查询出某个省下面的所有市和区(查询结果包含省)。如果只使用SQL语句来实现,需要使用到游标、临时表等技术。但在SQL Server2005中还可以使用CTE来实现。

    WITH district

    AS

    (

    --获得第一个结果集,并更新最终结果集

    SELECT * FROM t_tree WHERE id = 0

    UNION ALL

    --下面的select语句首先会根据从上一个查询结果集中获得的id值来查询parent_id

    --字段的值,然后district就会变当前的查询结果集,并继续执行下面的select 语句

    --如果结果集不为null,则与最终的查询结果合并,同时用合并的结果更新最终的查

    --询结果;否则停止执行。最后district的结果集就是最终结果集。

    SELECT a.* FROM t_tree aINNER JOIN district bONa.parent_id = b.id

    )

    SELECT * FROM district

    查询结果:

    \

    有关使用公用表表达式的详细信息,请参阅使用公用表表达式的递归查询。

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Java教程
1664
14
CakePHP 教程
1423
52
Laravel 教程
1317
25
PHP教程
1268
29
C# 教程
1247
24
C++ 函数的递归实现:递归深度有限制吗? C++ 函数的递归实现:递归深度有限制吗? Apr 23, 2024 am 09:30 AM

C++函数的递归深度受到限制,超过该限制会导致栈溢出错误。限制值因系统和编译器而异,通常在1000到10000之间。解决方法包括:1.尾递归优化;2.尾调用;3.迭代实现。

BTCC教学:如何在BTCC交易所绑定使用MetaMask钱包? BTCC教学:如何在BTCC交易所绑定使用MetaMask钱包? Apr 26, 2024 am 09:40 AM

MetaMask(中文也叫小狐狸钱包)是一款免费的、广受好评的加密钱包软件。目前,BTCC已支持绑定MetaMask钱包,绑定后可使用MetaMask钱包进行快速登入,储值、买币等,且首次绑定还可获得20USDT体验金。在BTCCMetaMask钱包教学中,我们将详细介绍如何注册和使用MetaMask,以及如何在BTCC绑定并使用小狐狸钱包。MetaMask钱包是什么?MetaMask小狐狸钱包拥有超过3,000万用户,是当今最受欢迎的加密货币钱包之一。它可免费​​使用,可作为扩充功能安装在网络

微软发布 Win11 八月累积更新:提高安全、优化锁屏等 微软发布 Win11 八月累积更新:提高安全、优化锁屏等 Aug 14, 2024 am 10:39 AM

本站8月14日消息,在今天的8月补丁星期二活动日中,微软发布了适用于Windows11系统的累积更新,包括面向22H2和23H2的KB5041585更新,面向21H2的KB5041592更新。上述设备安装8月累积更新之后,本站附上版本号变化如下:21H2设备安装后版本号升至Build22000.314722H2设备安装后版本号升至Build22621.403723H2设备安装后版本号升至Build22631.4037面向Windows1121H2的KB5041585更新主要内容如下:改进:提高了

微软 Win11 压缩为 7z、TAR 文件的功能已从 24H2 下放到 23H2/22H2 版本 微软 Win11 压缩为 7z、TAR 文件的功能已从 24H2 下放到 23H2/22H2 版本 Apr 28, 2024 am 09:19 AM

本站4月27日消息,微软本月初向Canary和Dev频道发布了Windows11Build26100预览版更新,预估会成为Windows1124H2更新的候选RTM版本。新版本中最主要的变化在于文件资源管理器、整合Copilot、编辑PNG文件元数据、创建TAR和7z压缩文件等等。@PhantomOfEarth发现,微软已经将24H2版本(Germanium)部分功能下放到23H2/22H2(Nickel)版本中,例如创建TAR和7z压缩文件。如示意图所示,Windows11将支持原生创建TAR

微软全屏弹窗催促:Windows 10用户抓紧时间升级到Windows 11 微软全屏弹窗催促:Windows 10用户抓紧时间升级到Windows 11 Jun 06, 2024 am 11:35 AM

6月3日消息,微软正在积极向所有Windows10用户发送全屏通知,鼓励他们升级到Windows11操作系统。这一举措涉及了那些硬件配置并不支持新系统的设备。自2015年起,Windows10已经占据了近70%的市场份额,稳坐Windows操作系统的霸主地位。然而,市场占有率远超过82%的市场份额,占有率远超过2021年面世的Windows11。尽管Windows11已经推出已近三年,但其市场渗透率仍显缓慢。微软已宣布,将于2025年10月14日后终止对Windows10的技术支持,以便更专注于

微软推出新版Outlook for Windows:日历功能全面升级 微软推出新版Outlook for Windows:日历功能全面升级 Apr 27, 2024 pm 03:44 PM

在4月27日的消息中,微软公司宣布即将发布新版OutlookforWindows客户端的测试。此次更新主要聚焦于优化日历功能,旨在提升用户的工作效率,进一步简化日常工作流程。新版OutlookforWindows客户端的改进点在于其更加强大的日历管理功能。现在,用户能够更便捷地分享个人的工作时间与地点信息,使得会议规划变得更为高效。此外,Outlook还新增了人性化设置,允许用户设定会议自动提前结束或推迟开始,为用户提供了更多的灵活性,无论是换会议室、稍作休息还是享受一杯咖啡,都能轻松安排。根据

微软计划2024年下半年在Windows 11中淘汰NTLM,全面转向Kerberos认证 微软计划2024年下半年在Windows 11中淘汰NTLM,全面转向Kerberos认证 Jun 09, 2024 pm 04:17 PM

2024年下半年,微软安全官方博客发布了一条消息,以回应安全社区的呼吁。公司计划在2024年下半年发布的Windows11中淘汰NTLANManager(NTLM)认证协议,以提升安全性。根据之前的解释,微软此前已经有过类似的动作。去年10月12日,微软在一份官方新闻稿中就已经提出了一个过渡计划,旨在逐步淘汰NTLM身份验证方式,并推动更多企业和用户转向使用Kerberos。为了帮助那些可能在关闭NTLM身份验证后遇到硬连接(hardwired)应用程序和服务问题的企业,微软提供了IAKerb和

C++ 递归进阶:理解尾递归优化及其应用 C++ 递归进阶:理解尾递归优化及其应用 Apr 30, 2024 am 10:45 AM

尾递归优化(TRO)可提高特定递归调用的效率。它将尾递归调用转换为跳转指令,并将上下文状态保存在寄存器中,而不是堆栈上,从而消除对堆栈的额外调用和返回操作,提高算法效率。利用TRO,我们可以针对尾递归函数(例如阶乘计算)进行优化,通过将tail递归调用替换为goto语句,编译器会将goto跳转移化为TRO,优化递归算法的执行。

See all articles