首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

关于使用CTE(公用表表达式)递归查询

本文转载:http://www.cnblogs.com/shuangnet/archive/2013/03/22/2975929.html 公用表表达式 (CTE) 具有一个重要优点,那就是能够引用其自身...递归 CTE 是一个重复执行初始 CTE 以返回数据子集直到获取完整结果集公用表表达式。   当某个查询引用递归 CTE 时,它即被称为递归查询。...在 SQL Server 早期版本,递归查询通常需要使用临时表、游标和逻辑来控制递归步骤流。 ...)     --只有在查询定义为所有结果列都提供了不同名称时,列名称列表才是可选。     ...如果CTE达式名称与某个数据表或视图重名,则紧跟在该CTE后面的SQL语句使用仍然是CTE,当然,后面的SQL语句使用就是数据表或视图。 4.

1.4K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    SQL优化(五) PostgreSQL (递归)CTE 通用表表达式

    本文转发自技术世界,原文链接 http://www.jasongj.com/sql/cte/ CTE or WITH WITH语句通常被称为通用表表达式(Common Table Expressions...DELETE语句从products表删除了一个月数据,并通过RETURNING子句将删除数据集赋给moved_rows这一CTE,最后在主语句中通过INSERT将删除商品插入products_log...如果WITH里面使用不是SELECT语句,并且没有通过RETURNING子句返回结果集,则主查询不可以引用该CTE,但主查询和WITH语句仍然可以继续执行。...term中使用 recursive termSELECT后面不允许出现引用CTE名字子查询 同时使用多个CTE达式时,不允许多表达式之间互相访问(支持单向访问) 在recursive term不允许使用...,且可在主查询多次使用 CTE可极大提高代码可读性及可维护性 CTE不支持将主查询where后限制条件push down到CTE,而普通子查询支持

    2.6K60

    基础很重要~~04.表表达式-上篇

    概述: 本篇主要是对表表达式中派生表和公用表表达式基础总结。...表表达式包含四种:   1.派生表   2.公用表表达式   3.视图   4.内联表值函数 本篇是表表达式上篇,只会讲到派生表和公用表表达式,下篇会讲到视图和内联表值函数。...表表达式是一个表,而关系表行驶没有固定顺序,所以 ANSI SQL 不允许表表达式查询语句中出现ORDER BY字句。...除非另外还指定了 TOP 或 FOR XML,否则,ORDER BY 子句在视图、内联函数、派生表、子查询和公用表表达式无效。...公用表表达式是和派生表相似的另一种形式表表达式,但是公用表表达式具有一些优势。

    1.5K120

    SQL WITH AS 使用方法

    为此,在SQL Server 2005提供了另外一种解决方案,这就是公用表表达式CTE),使用CTE,可以使SQL语句可维护性,同时,CTE要比表变量效率高得多。...) 其中cte是一个公用表表达式,该表达式在使用上与表变量类似,只是SQL Server 2005在处理公用表表达式方式上有所不同。...--使用递归公用表表达式显示递归多个级别 WITH DirectReports(ManagerID, EmployeeID, EmployeeLevel) AS ( SELECT ManagerID...e.ManagerID = d.EmployeeID ) SELECT ManagerID, EmployeeID, EmployeeLevel FROM DirectReports ; --使用递归公用表表达式显示递归两个级别...) SELECT ManagerID, EmployeeID, EmployeeLevel FROM DirectReports WHERE EmployeeLevel <= 2 --使用递归公用表表达式显示层次列表

    15910

    T-SQL基础(三)之子查询与表表达式

    :warning: 通常我们自己难以发现代码逻辑错误,而我们最终用户尝尝扮演着问题发现者角色 :joy: 编写语义清晰明了SQL可以很大程度避免逻辑上错误 表表达式 表表达式,也可称为表子查询...,是一个命名查询表达式,表示一个有效关系表,因此表表达式必须满足以下三个条件: 无法表表达式结果集顺序 表表达式表示一个关系表,关系型数据库基于集合理论,表数据是无序。...或 FOR XML,否则,ORDER BY 子句在视图、内联函数、派生表、子查询和公用表表达式无效....所有列必须显式指定名称 所有列名必须唯一 表表达式分为:派生表、公用表表达式、视图三种类型。其中,派生表与公用表表达式只适用于单语句范围,即,只存在于当前查询语句中。视图则可以被多条查询语句复用。...公用表表达式(CTE)定义方式如下: WITH...AS ( ... ) 与派生表类似,外部查询完成后,CTE也就消失了。

    1.6K40

    T-SQL基础(三)之子查询与表表达式

    编写语义清晰明了SQL可以很大程度避免逻辑上错误 表表达式 表表达式,也可称为表子查询,是一个命名查询表达式,表示一个有效关系表,因此表表达式必须满足以下三个条件: 无法表表达式结果集顺序...表表达式表示一个关系表,关系型数据库基于集合理论,表数据是无序。...子句在视图、内联函数、派生表、子查询和公用表表达式无效....所有列必须显式指定名称 所有列名必须唯一 表表达式分为:派生表、公用表表达式、视图三种类型。其中,派生表与公用表表达式只适用于单语句范围,即,只存在于当前查询语句中。...公用表表达式(CTE)定义方式如下: WITH...AS ( ... ) 与派生表类似,外部查询完成后,CTE也就消失了。

    1.5K10

    SQL递归查询知多少

    一、SqlServer 递归查询 1、基本概念 公用表表达式 (CTE) 可以认为是在单个 SELECT、INSERT、UPDATE、DELETE 或 CREATE VIEW 语句执行范围内定义临时结果集...公用表表达式可以包括对自身引用,这种表达式称为递归公用表表达式。 创建递归查询。有关详细信息,请参阅使用公用表表达式递归查询。...MSDN上对CTE介绍 T-SQL查询进阶--详解公用表表达式(CTE) CTE 基本语法结构如下: WITH expression_name [ ( column_name [,...n] )...] AS ( CTE_query_definition ) --只有在查询定义为所有结果列都提供了不同名称时,列名称列表才是可选。...--运行 CTE 语句为: SELECT FROM expression_name; 即三个部分: 公用表表达式名字(在WITH关键字之后) 查询列名(可选) 紧跟AS

    4.5K80

    SQL嵌套查询_sql差集嵌套

    他是在外部查询 FROM 定义。派生表存在范围只是在外部查询,只要外部查询结束了,派生表也就不存在了。派生表一定要写在 FROM 后面范围内,用()括起来。后面跟着派生表名称。...SQL CTE( 公用表表达式 ) 定义语法: with 公用表表达式名称 所涉及列(非全选) 一个 SELECT 语句,在 AS 之后紧跟。...按照是否递归,可以将公用表( CTE )表达式分为递归公用表表达式和非递归公用表表达式 ....非递归公用表表达式: 非递归公用表表达式CTE )是查询结果仅仅一次性返回一个结果集用于外部查询调用。...并不在其定义语句中调用其自身 CTE 非递归公用表表达式CTE使用方式和 视图 以及 子查询 一致 递归公用表表达式: 流程控制语句 BEGIN……END

    2.2K20

    使用CTE解决复杂查询问题

    最近,同事需要从数个表查询用户业务和报告数据,写了一个SQL语句,查询比较慢: Select S.Name, S.AccountantCode, ( Select COUNT(*) from (...-4274-8bbe-cbbe4d9c2e23.htm 指定临时命名结果集,这些结果集称为公用表表达式 (CTE)。...该表达式源自简单查询,并且在单条 SELECT、INSERT、UPDATE、MERGE 或 DELETE 语句执行范围内定义。...该子句也可用在 CREATE VIEW 语句中,作为该语句 SELECT 定义语句一部分。公用表表达式可以包括对自身引用。这种表达式称为递归公用表表达式。...注意上面的Count函数,它统计了一个列,如果该列在某行值为NULL,将不会统计该行,这正符合需求。 另外,CTE还可以做递归处理,详细见上面的联机丛书URL内容说明。

    1.8K60

    表表达式,排名函数

    表表达式,排名函数 你真的会玩SQL吗?简单 数据修改 你真的会玩SQL吗?你所不知道 数据聚合 你真的会玩SQL吗?透视转换艺术 你真的会玩SQL吗?...玩爆你数据报表之存储过程编写(下) 这次讲有些可能是经常用但不会注意到,所以来统一总结一下用法。 我们往往需要临时存储某些结果集。除了用临时表和表变量,还可以使用公用表表达式方法。...表表达式 期待单个值地方可以使用标量子查询 期待多个值地方可以使用多值子查询 在期待出现表地方可用表值子查询或表表达式 1.派生表 是从查询表达式派生出虚拟结果表表表达式,派生表存在范围只是外部查询...2.公用表表达式CTE) 非递归公用表表达式CTE)是查询结果仅仅一次性返回一个结果集用于外部查询调用。...递归公用达式 来引用他人一个示例: 先建一张表栏目表如下,栏目Id,栏目名称,栏目的父栏目 ?

    1.9K90

    第18章_MySQL8其它新特性

    公用表表达式 公用表表达式(Common Table Expressions)简称为 CTE,MySQL 现在支持递归和非递归两种形式 CTE。...新特性 2:公用表表达式 公用表表达式(或通用表表达式)简称为 CTE(Common Table Expressions)。CTE 是一个命名临时结果集,作用范围是当前语句。...# 3.1 普通公用表表达式 普通公用表表达式语法结构是: WITH CTE名称 AS (子查询) SELECT|DELETE|UPDATE 语句; 普通公用表表达式类似于子查询,不过,跟子查询不同是...# 3.2 递归公用表表达式 递归公用表表达式也是一种公用表表达式,只不过,除了普通公用表表达式特点以外,它还有自己特点,就是可以调用自己。...用递归公用表表达式递归查询,查出以这个递归公用表表达式的人为管理者的人,并且代次值加 1。直到没有人以这个递归公用表表达式的人为管理者了,递归返回。

    37930

    根据上一行填充本行空白栏位,SQL处理方式

    要在SQL中使用递归,那么第一个应该想到就是公用表表达式CTE。...是不为空成绩,递归链接条件是上一个学生ID=当前学生ID-1.于是我们可以将此次公用表表达式写为: 1 with t  2 as  3 (  4 select * from t1 where Score...那么简单办法就是使用开窗函数给每一行数据增加一列连续自增列,SQL Server函数是ROW_NUMBER().这样就变成了两个CTE嵌套使用,请看代码: 1 with t1new  2 as...on t.RowNo+1=t1new.RowNo 16 where t1new.Score is null 17 ) 18  19 select * 20 from t 21 order by ID 公用表表达式真的很强大...,另外在使用View出Report时候,也可以用CTE,因为在View不能用临时表,所以使用CTE代替临时表是个不错解决方案。

    48730

    探索MySQL递归查询:处理层次结构数据

    在数据库管理,处理具有层次结构数据一直是一项常见任务。MySQL递归查询功能通过公用表表达式CTE)为处理这类数据提供了便捷方式。...语法解释 在MySQL,递归查询基本语法结构如下所示: WITH RECURSIVE cte_name AS ( -- 初始查询(第一次迭代) SELECT initial_query...join_condition ) -- 最终查询 SELECT * FROM cte_name; 在这个语法cte_name 是公用表表达式名称,initial_query 是初始查询,recursive_query...MySQL5.7实现 在 MySQL 5.7 ,递归查询不支持使用公用表表达式CTE),而是通过使用用户定义变量(User-Defined Variables)和自连接(Self Join...递归查询在实际应用还能快速准确地分析和查找复杂层级数据关系,提升数据处理效率和准确性。 希望这篇文章能帮助您了解MySQL递归查询,以及如何利用这一功能处理层次结构数据。

    96810

    Mysql8.0 新特性 窗口函数 公共表表达式

    准备工作: 普通共用表表达式 语法结构: #普通共用表表达式语法结构: WITH CTE名称 AS (子查询) SELECT|DELETE|UPDATE 语句; -- 普通公用表表达式类似于子查询,不过...递归公用表表达式也是一种公用表表达式: 只不过,除了普通公用表表达式特点以外,它还有自己 特点,就是可以调用自己 递归共用表表达式语法结构: -- 语法结构和普通共用表表达式,相差不大,就在在定义:...递归共用表表达式 用递归公用表表达式种子查询,找出初代管理者。...字段 n 表示代次,初始值为 1 表示是第一 代管理者 用递归公用表表达式递归查询,查出以这个递归公用表表达式的人为管理者的人,并且代次 值加 1 直到没有人以这个递归公用表表达式的人为管理者了...JOIN cte ON (a.manager_id = cte.employee_id) -- 递归查询,找出以递归公用表表达式的人为领导的人 ) SELECT employee_id,last_name

    12410

    那些年我们写过T-SQL(中篇)

    中篇重点在于,在复杂情况下使用表表达式查询,尤其是公用表表达式(CTE),也就是非常方便WITH AS XXX应用,在SQL代码,这种方式至少可以提高一倍工作效率。...本系列包含上中下三篇,内容比较驳杂,望大家耐心阅读: 那些年我们写过T-SQL(上篇):上篇介绍查询基础,包括基本查询逻辑顺序、联接和子查询 那些年我们写过T-SQL(中篇):中篇介绍表表达式、...表表达式Table Expression是一种命名查询表达式,代表一个有效关系表与其他表使用类似。SQL Server支持4种类型表表达式:派生表、公用表表达式、视图等。...派生表 派生表也称为子查询表,非常常见,之前介绍相关子查询时那些命名了外部表均是表表达式表表达式并没有任何物理实例化,其优势在于使得代码逻辑清晰并可重用,但对性能并无影响。...[order]) AS D1 GROUP BY orderyear) AS D2 WHERE numcusts > 100 公用表表达式CTE 其是T-SQL提供一种表表达式增强形式,使用起来非常便捷方便

    3.7K70

    SQL高级查询方法

    字 2 图 预计阅读时间:14 分钟 本文目录: 4.8 子查询 subquery 4.9 联接 join 4.10 UNION运算符 4.11 EXCEPT和INTERSECT半联接 4.12 公用表表达式...使用 UNION 运算符时需遵循下列准则: 在用 UNION 运算符组合语句中,所有选择列表达式(如列名称、算术表达式、聚合函数等)数目必须相同。...4.12 公用表表达式 WITH 公用表表达式 (CTE) 可以认为是在单个 SELECT、INSERT、UPDATE、DELETE 或 CREATE VIEW 语句执行范围内定义临时结果集。...CTE 与派生表类似,具体表现在不存储为对象,并且只在查询期间有效。与派生表不同之处在于,CTE 可自引用,还可在同一查询引用多次。 CTE 可用于: 创建递归查询。...可以在用户定义例程(如函数、存储过程、触发器或视图)定义 CTECTE 由表示 CTE 达式名称、可选列列表和定义 CTE 查询组成。

    5.7K20

    PostgreSQL - SQL调优方案

    :建立哈希表,由于Hash特点只能用于等值连接(=),会将表连接两个表数据放进内存,需要消耗大量内存 Merge Join:等值或非等值连接(>,=,<=,但是不包含!...使用CTE进行预查询 公用表表达式(Common Table Expression,简称CTE),对于一个很长很复杂sql,可以用CTE把一部分sql片段预先查询出来,该sql片段查询结果可以被整个...类似于在代码抽出一个公共方法逻辑,方便被其他方法所使用。 CTE不仅提高了可读性,还可以非常有效地提高一条复杂长sql查询效率,多个CTE之间可以用,分隔。...语法是with as (),如果被CTE定义表名被调用两次以上,则优化器会自动将预查询数据放入一个TEMP表,如果只被调用一次则不会。...Nested Loop EXPLAIN分析pgsql性能 T-SQL查询进阶–详解公用表表达式(CTE) 使用WITH AS提高性能简化嵌套SQL

    2K20
    领券