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

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

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

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

  递归 CTE 能够极大地简化在 SELECTINSERTUPDATEDELETE  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

 

查询结果:


 

有关使用公用表表达式的具体信息,请參阅使用公用表表达式的递归查询。

转载于:https://www.cnblogs.com/bhlsheji/p/5112810.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/458435.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C#委托实现C++ Dll中的回调函数

from:https://blog.csdn.net/ferrycooper/article/details/63261771很多的Dll都是C和C写的,那么如果C#想要调用Dll中的函数怎么办,尤其是Dll函数其中一个参数是函数指针的,即里面有回掉函数的用C#怎么实现? C中的回掉函数在C#中有…

15个最好的HTML5前端响应式框架(2014)

文中的多个框架基于SASS创建,SCSS是一种比LESS更简洁的样式表编程语言,它能够编绎成CSS,可复用CSS代码,声明变量,甚至是函数,类Ruby/Python的语法。參见: LESS vs SASS?选择哪种CSS样…

【转载】Direct3D基础知识

原文:Direct3D基础知识 重新从头开始学习DX,以前太急于求成了,很多基础知识都没掌握就开始写程序了,结果出了问题很难解决.1. D3D体系结构D3D与GDI处与同一层次,区别在于,D3D可以使用HAL(Hardware Abstraction Layer)通过DDI来访问图形硬件,充分发挥硬件性能.…

关于Xcode隐藏打印的logs的方法

https://www.cnblogs.com/jukaiit/p/5881062.html 第一步: 第二步: 第三步: 添加参数: Name :OS_ACTIVITY_MODE Value : disable

指针函数与函数指针的区别

首先它们之间的定义:1、指针函数是指带指针的函数,即本质是一个函数,函数返回类型是某一类型的指针。 类型标识符 *函数名(参数表)int *f(x,y);首先它是一个函数,只不过这个函数的返回值是一个地址值。函数返回值必须用…

C++走向远洋——63(项目二2、两个成员的类模板)

*/ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:text.cpp * 作者:常轩 * 微信公众号:Worldhello * 完成日期:2016年6月4日 * 版本号:V1.0 * 问题描述&…

iOS 抓包工具 charles工具

在Charles官网下载最新的 安装包 在电脑上安装完成之后,以 注册码 Registered Name: https://zhile.io License Key: 48891cf209c6d32bf4 进行注册即可完成 在手机上面设置代理:输入电脑的网络IP以及端口号 以下为查找的步骤: 在手机上手…

写一个Android输入法01——最简步骤

本文演示用Android Studio写一个最简单的输入法。界面和交互都很简陋,只为剔肉留骨,彰显写一个Android输入法的要点。 1、打开Android Studio创建项目,该项目和普通APP的不同之处在于它不需要添加任何Activity:我给该输入法命名为…

谈谈自己对于Auth2.0的见解

Auth的原理网上有很多,我这里就不在赘述了。 这里有张时序图我个人觉得是比较合理而且直观的,(感谢这篇博文:http://justcoding.iteye.com/blog/1950270) 参照这个流程,模拟了下部分代码,当然是…

iPad开发--QQ空间,处理横竖屏布局,实现子控件中的代理

一.主界面横竖屏效果图 二.主界面加载, 初始化Dock(红色框的控件),判断程序启动时的屏幕方向.调用自己- (void)transitionToLandScape:(BOOL)isLandScape;方法,通知子控件屏幕方向改变,将此事件一直传递下去程序运行过程中屏幕方向改变会调用- (void)viewWillTransitionToSize:…

C++ Vector 汇总

C vector erase函数最近使用了顺序容器的删除元素操作,特此记录下该函数的注意事项。 在Cprimer中对c.erase(p) 这样解释的:c.erase(p) 删除迭代器p所指向的元素,返回一个指向被删元素之后元素的迭代器,若p指向尾元素&#xff…

vNext之旅(2):net451、dotnet5.4、dnx451、dnxcore50都是什么鬼

继上次”vNext之旅(1):从概念和基础开始”之后再次学习vNext重新遇到了弄不懂的事情,花了一些时间学习,今天来分享一下,为后人节省些时间。起因 在用vNext造轮子——框架的时候引入“Microsoft.Dnx.Runtime…

C++中模板使用详解

转自:http://www.360doc.com/content/09/0403/17/799_3011262.shtml 1. 模板的概念。 我们已经学过重载(Overloading),对重载函数而言,C的检查机制能通过函数参数的不同及所属类的不同。正确的调用重载函数。例如,为求两个数的最大值&#xf…

腾讯2016春招安全岗笔试题解析

腾讯2016春招安全岗笔试题解析 昨天(4月2日)晚上7:00到9:00做了腾讯春招安全岗的笔试题。下面解析一下: 题目解析 1 在生成随机数前用当前时间设置随机数种子应该是安全的。如果程序用固定的数产生随机数,其结果也是固定的。如果用…

VS项目属性的一些配置项的总结(持续增加。。。)

首先,解决方案和项目文件夹包含关系(c项目): VS解决方案和各个项目文件夹以及解决方案和各个项目对应的配置文件包含关系:假设新建一个项目ssyy,解决方案起名fangan,注意解决方案包括项目,此时生成的最外层…

子元素增加margin-top会增加给父元素的问题

假设我们有如下代码 <div id"father" style"height:400px;width:400px;background:#e4393c;">     <div id"child" style"background:green;height:100px;width:100px;margin-top:40px;"></div>   </div&g…

Zend Studio使用教程之升级Zend Studio(1/3)

2019独角兽企业重金招聘Python工程师标准>>> Zend Studio是新一代的专业级智能PHP IDE&#xff0c;它旨在帮助开发人员提高工作效率&#xff0c;创造出高品质的PHP应用程序&#xff01;它包含了PHP开发所必须的部件&#xff0c;通过一整套的编辑、调试、分析、优化和…

java中可重入锁的学习总结

2019独角兽企业重金招聘Python工程师标准>>> 经常看到网上的人说&#xff0c;可重入锁一词&#xff0c;但是总是没怎么了解&#xff0c;到底什么是可重入锁&#xff0c;一直是一个模糊的概念&#xff0c;下面来大致总结一下。 可重入锁&#xff1a;指的是同一个线程…

基于用户投票的排名算法(一):Delicious和Hacker News

互联网的出现&#xff0c;意味着"信息大爆炸"。 用户担心的&#xff0c;不再是信息太少&#xff0c;而是信息太多。如何从大量信息之中&#xff0c;快速有效地找出最重要的内容&#xff0c;成了互联网的一大核心问题。 各种各样的排名算法&#xff0c;是目前过滤信息…

Windows 下 Python 环境搭建

简述Python 是跨平台的&#xff0c;可以运行在 Windows、Mac OS X 和各种 Linux/Unix 系统上。在学习 Python 之前&#xff0c;首先要搭建 Python 环境。完成后&#xff0c;会得到 Python 解释器&#xff08;负责运行 Python 程序的&#xff09;&#xff0c;一个命令行交互环境…