3 回答

TA貢獻(xiàn)1820條經(jīng)驗(yàn) 獲得超2個(gè)贊
在子查詢與簡(jiǎn)單(非遞歸)CTE版本中,它們可能非常相似。您將必須使用探查器和實(shí)際執(zhí)行計(jì)劃來(lái)發(fā)現(xiàn)任何差異,而這將特定于您的設(shè)置(因此我們無(wú)法完全告訴您答案)。
在一般 ; CTE可以遞歸使用;子查詢不能。這使得它們特別適合于樹形結(jié)構(gòu)。

TA貢獻(xiàn)2037條經(jīng)驗(yàn) 獲得超6個(gè)贊
Common Table Expression(當(dāng)不使用它進(jìn)行遞歸查詢時(shí))的主要優(yōu)點(diǎn)是封裝,而不是必須在希望使用它的每個(gè)位置聲明子查詢,您只需定義一次即可,但是有多個(gè)引用對(duì)此。
但是,這并不能意味著它只執(zhí)行一次(按照這個(gè)非常的答案以前的迭代,感謝所有那些評(píng)論)。如果多次引用,查詢肯定有可能多次執(zhí)行;查詢優(yōu)化器最終決定如何解釋CTE。

TA貢獻(xiàn)1869條經(jīng)驗(yàn) 獲得超4個(gè)贊
CTE對(duì)于遞歸最有用:
WITH hier(cnt) AS (
SELECT 1
UNION ALL
SELECT cnt + 1
FROM hier
WHERE cnt < @n
)
SELECT cnt
FROM hier
將返回@n行(最多101)。對(duì)于日歷,虛擬行集等有用。
它們也更具可讀性(我認(rèn)為)。
除此之外,CTE的和subqueries是相同的。
添加回答
舉報(bào)