由于长期使用 SQL2000,我并没有真正接触过公共表表达式。

我给出的答案 这里(#4025380)这里(#4018793) 违背了潮流,因为他们没有使用 CTE。

我很欣赏它们对于递归来说是最重要的,并且有一些查询可以通过它们的使用而大大简化,但是在什么时候它们的使用只是无聊的呢?与子查询或联接相比,它们是否具有巨大的性能优势?它们真的简化了代码并使其更易于维护吗?

简而言之,什么时候使用 CTE 而不是“较小”语法是好的做法。

有帮助吗?

解决方案

如果出现以下情况,您通常应该在普通子查询上使用 CTE:

  • 您的查询需要递归(正如您所指出的)
  • 子查询很大或很复杂
  • 包含的查询很大或很复杂
  • 子查询重复(或者至少可以通过对公共子查询执行不同的简单操作来简化几个子查询)

简而言之,是的,如果使用得当,它们确实会使查询更具可读性。

其他提示

它们是语法糖,具有分层/递归查询除外。

然而,并不是唯一可以递归做应该是一切 - 通过递归CTE日期代只是比光标更好 - 数字表伎俩比例要好得多

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top