Sql-Server

如果一個查詢包含兩個相同的子查詢,它們都會執行嗎?

  • August 13, 2014

假設我有一個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

引用自:https://dba.stackexchange.com/questions/73849