何时使用通用表表达式(CTE)

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (13)

我已经开始读到公共表表达式我无法想象我需要使用它们的用例。它们似乎是多余的,因为派生表也可以这样做。有什么是我错过的,还是不太明白?有人能给我一个简单的例子,说明常规的SELECT、派生或临时表查询的局限性,使之成为CTE的情况吗?任何简单的例子都将受到高度赞赏。

提问于
用户回答回答于

例如,如果需要多次引用/加入相同的数据集,您可以通过定义一个CTE来实现。因此,它可以是代码重用的一种形式。

CTE可用于:

  • 创建递归查询。有关更多信息,
  • 在不需要一般使用视图的情况下,可以替代视图;也就是说,不必将定义存储在元数据中。
  • 通过从标量子选择派生的列或非确定性函数或具有外部访问权限的函数启用分组。
  • 在同一语句中多次引用结果表。
用户回答回答于

我用它们来分解复杂的查询,特别是复杂的连接和子查询。我发现我越来越多地使用它们作为“伪视图”来帮助我理解查询的意图。

我唯一的抱怨是它们不能被重复使用。例如,我可能有一个存储的proc,其中有两个UPDATE语句,可以使用相同的CTE。但是CTE的“范围”只是第一个查询。

麻烦的是,“简单的例子”可能并不是真的需要CTE的!

扫码关注云+社区