答案有两种版本,一种使用a SubQuery,另一种使用a CTE来解决相同的问题。现在,使用CTE (Common Table Expression)over as 的好处是什么ub-query(因此,查询的实际操作更具可读性)使用CTEover子选择的唯一好处是我实际上可以为子查询命名。当将CTE用作简单(非递归)CTE时,两者之间还有其他区别吗?
3 回答
DIEA
TA贡献1820条经验 获得超2个赞
在子查询与简单(非递归)CTE版本中,它们可能非常相似。您将必须使用探查器和实际执行计划来发现任何差异,而这将特定于您的设置(因此我们无法完全告诉您答案)。
在一般 ; CTE可以递归使用;子查询不能。这使得它们特别适合于树形结构。
阿晨1998
TA贡献2037条经验 获得超6个赞
Common Table Expression(当不使用它进行递归查询时)的主要优点是封装,而不是必须在希望使用它的每个位置声明子查询,您只需定义一次即可,但是有多个引用对此。
但是,这并不能意味着它只执行一次(按照这个非常的答案以前的迭代,感谢所有那些评论)。如果多次引用,查询肯定有可能多次执行;查询优化器最终决定如何解释CTE。
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是相同的。
添加回答
举报
0/150
提交
取消