3 回答

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

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

TA貢獻1869條經(jīng)驗 獲得超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是相同的。
添加回答
舉報