多个 CTE 和递归 CTE 之间的区别

Difference between multiple CTE and recusrive CTE

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

  1. 递归 CTE,它有一个锚点,然后与使用锚点和先前调用结果的子查询联合
  2. Multiple CTE 其中有两个不同的 CTE 定义逗号分隔然而,第二个最终引用第一个有点像递归 CTE。

我指的是下面的例子:

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

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

CTE 不必是递归的。您可以使用它们代替第一个示例所做的子查询。您可以用一个或多个 CTE 代替子查询。

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

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

假设多个 CTE,您的意思是一组由后续 SELECT 语句定义的系列 CTE,那么相比之下,这是一组针对锚集(和字段)的转换,顺序为定义。