为了账号安全,请及时绑定邮箱和手机立即绑定

CTE和SubQuery之间的区别?

CTE和SubQuery之间的区别?

慕运维8079593 2019-11-25 12:48:09
答案有两种版本,一种使用a SubQuery,另一种使用a CTE来解决相同的问题。现在,使用CTE (Common Table Expression)over as 的好处是什么ub-query(因此,查询的实际操作更具可读性)使用CTEover子选择的唯一好处是我实际上可以为子查询命名。当将CTE用作简单(非递归)CTE时,两者之间还有其他区别吗?
查看完整描述

3 回答

?
DIEA

TA贡献1820条经验 获得超2个赞

在子查询与简单(非递归)CTE版本中,它们可能非常相似。您将必须使用探查器和实际执行计划来发现任何差异,而这将特定于您的设置(因此我们无法完全告诉您答案)。

一般 ; CTE可以递归使用;子查询不能。这使得它们特别适合于树形结构。


查看完整回答
反对 回复 2019-11-25
?
阿晨1998

TA贡献2037条经验 获得超6个赞

Common Table Expression(当不使用它进行递归查询时)的主要优点是封装,而不是必须在希望使用它的每个位置声明子查询,您只需定义一次即可,但是有多个引用对此。


但是,这并不能意味着它只执行一次(按照这个非常的答案以前的迭代,感谢所有那些评论)。如果多次引用,查询肯定有可能多次执行;查询优化器最终决定如何解释CTE。


查看完整回答
反对 回复 2019-11-25
?
MMTTMM

TA贡献1869条经验 获得超4个赞

CTE对于递归最有用:


WITH hier(cnt) AS (

        SELECT  1

        UNION ALL

        SELECT  cnt + 1

        FROM    hier

        WHERE   cnt < @n

        )

SELECT  cnt

FROM    hier

将返回@n行(最多101)。对于日历,虚拟行集等有用。


它们也更具可读性(我认为)。


除此之外,CTE的和subqueries是相同的。


查看完整回答
反对 回复 2019-11-25
  • 3 回答
  • 0 关注
  • 610 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信