【问题标题】:Difference between multiple CTE and recusrive CTE多重 CTE 和递归 CTE 的区别
【发布时间】:2015-02-12 23:50:00
【问题描述】:

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

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

我指的是下面的一个例子:

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

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

【问题讨论】:

  • 区别是一个是递归的,另一个不是?不知道怎么回答。

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


【解决方案1】:

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

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

【讨论】:

  • 他说了什么。 CTE 只是一个派生查询,具有可以引用自身的额外好处(即递归 cte)。我一直使用它们来代替派生表,因为我喜欢我的代码使用它们的方式。但主要的是,如果你希望它是递归的,它必须是 CTE。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-30
    • 2021-10-10
    • 1970-01-01
    • 1970-01-01
    • 2011-10-20
    • 1970-01-01
    • 2014-08-13
    相关资源
    最近更新 更多