Sql-Server
如果一個查詢包含兩個相同的子查詢,它們都會執行嗎?
假設我有一個
SELECT
包含兩個相同子查詢的查詢,如下所示:SELECT (SELECT SUM(Price) FROM Product p WHERE p.GroupID = g.GroupID) AS 'TotalCost', (SELECT SUM(Price) FROM Product p WHERE p.GroupID = g.GroupID) * 0.1 AS 'GST' FROM Group g
子查詢會
SUM
執行兩次,還是 SQL 將第一個結果用於第二個欄位?
相同的子查詢通常只執行一次。但是,您編寫查詢的方式不一定是實際的執行順序,因此無法保證。為確保這一點,請使用一個或兩個子查詢查看您的估計執行計劃,並進行比較。
在您的範例中,您可以將子查詢放在 JOIN 中,這將使其既可重用又更易於閱讀。
SELECT g.*, p.Amt AS 'TotalCost', p.Amt * 0.1 AS 'GST' FROM Group g LEFT JOIN (SELECT GroupID, SUM(Price) AS Amt FROM Product GROUP BY GroupID) AS p ON p.GroupID = g.GroupID