多次CTE和递归CTE之间的差异

时间:2015-02-12 23:50:00

标签: sql-server sql-server-2008 sql-server-2012 common-table-expression

我正在网上查看不同的CTE示例,因为我正在尝试学习CTE,但我遇到了两种主要的CTE写法

  1. 递归CTE ,其中包含一个锚点,然后是带有子查询的UNIONs,它使用锚点和之前调用的结果
  2. 多个CTE 其中有两个不同的CTE定义了逗号但是,第二个最终指的是第一个类似递归CTE。
  3. 我指的是以下示例:

    http://blog.sqlauthority.com/2009/08/08/sql-server-multiple-cte-in-one-select-statement-query/

    并想知道它与UNION和一个CTE名称的递归有何不同?

2 个答案:

答案 0 :(得分:1)

CTE不必递归。您可以使用它们而不是第一个示例正在执行的子查询。您可以在子查询位置使用一个或多个CTE。

了解CTE的最佳方法是创建一些测试数据并针对它们运行两个查询,以查看结果的不同。

答案 1 :(得分:0)

通常基于WHERE等限制条件,递归CTE从派生的CTE表达式内构建其锚点集。递归是独立的,而不是依赖于其他较早定义的表达式/集。

假设有多个CTE,是指由后续的SELECT语句串联定义的一组CTE,然后通过比较,这是按定义顺序对锚集(和字段)进行的一组转换。