在SQL Server 2008:如何避免SQL中的重複子查詢JOIN?
我有一個表,我想大意如下做些什麼:
SELECT T1.stuff, T2.morestuff from
(
SELECT code, date1, date2 from Table
) as T1
INNER JOIN
(
SELECT code, date1, date2 from Table
) as T2
ON T1.code = T2.code and T1.date1 = T2.date2
,這兩個子查詢完全相同。有沒有什麼辦法可以做到這一點,而無需重複子查詢腳本?
感謝
卡爾
謝謝。我希望有一個性能增益 - 或者它只是清理代碼? 「YourQuery」僅執行一次,還是每次您從YourQuery調用SELECT ...時都會重新執行計算? – Karl 2010-03-26 13:09:50
我認爲它可以在每次使用時重新評估CTE,但這是確保最好的方法:在SQL Server Management Studio中,運行以下命令:SET SETPLAN_ALL ON,然後運行原始查詢。您的查詢將不會運行,但執行計劃將顯示,請查看包含「select」的第一行的'TotalSubtreeCost'列。運行查詢的CTE版本,並再次查看'TotalSubtreeCost'列。有很大的區別嗎?如果沒有,那麼它可能重新評估它。您可以查看實際的計劃行,並查看SQL Server如何將您的查詢分解爲要處理的步驟。 – 2010-03-26 13:41:22