首頁 > 資料庫 > mysql教程 > 什麼時候應該使用公用表表達式 (CTE) 而不是派生表?

什麼時候應該使用公用表表達式 (CTE) 而不是派生表?

Patricia Arquette
發布: 2025-01-05 22:45:40
原創
201 人瀏覽過

When Should You Use a Common Table Expression (CTE) Instead of a Derived Table?

何時需要公共表表達式 (CTE)?

雖然衍生表可能足以滿足所有場景,但公共表表達式 ( CTE)在某些情況下具有明顯的優勢。

局限性派生表和臨時表

考慮資料需要多次連接的場景。使用常規 SELECT 語句或衍生表將導致為每個實例複製聯結語法,從而增加程式碼的冗長性。但是,CTE 允許您定義一個可在查詢中多次引用的可重複使用表。

範例

假設您有一個「Customers」表格並且想要尋找已下了多個訂單的客戶。

使用CTE:

WITH CustomerOrders AS (
    SELECT CustomerID, COUNT(*) AS OrderCount
    FROM Orders
    GROUP BY CustomerID
)

SELECT *
FROM Customers
JOIN CustomerOrders ON Customers.CustomerID = CustomerOrders.CustomerID
WHERE OrderCount > 1;
登入後複製

使用衍生表:

(SELECT CustomerID, COUNT(*) AS OrderCount
FROM Orders
GROUP BY CustomerID) AS CustomerOrders

SELECT *
FROM Customers
JOIN CustomerOrders ON Customers.CustomerID = CustomerOrders.CustomerID
WHERE OrderCount > 1;
登入後複製

如您所見,CTE 方法無需定義派生表別名(“客戶訂單”)兩次。

其他CTE優點

除了可重用性之外,CTE 還具有其他優點:

  • 遞歸: 可以使用CTE 實作遞歸,允許進行遍歷層次結構的複雜查詢資料結構。
  • 暫存: CTE 為中間查詢結果提供暫存,無需建立明確臨時表。
  • 按派生列分組: CTE 允許按從標量子查詢或派生的列進行分組非確定性函數,這對於派生表來說是不可能的。

以上是什麼時候應該使用公用表表達式 (CTE) 而不是派生表?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板