何時需要公共表表達式 (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) 而不是派生表?的詳細內容。更多資訊請關注PHP中文網其他相關文章!