0
我想知道是否有任何方法來優化以下SELECT
查詢。 (注:寫我的問題時不存在的表,我可能沒有正確的語法我打這個。)在SQL Server中優化CASE測試
的目標是,如果表2中包含任何相關行我想要的第三列的值設置爲數字Table2中的相關行。否則,如果Table3包含任何相關的行,我想將列設置爲表3中相關行的數目。否則,我想列值設置爲0
SELECT Id, Title,
CASE
WHEN EXISTS (SELECT * FROM Table2 t2 WHERE t2.RelatedId = Table1.Id) THEN
(SELECT COUNT(1) FROM Table2 t2 WHERE t2.RelatedId = Table1.Id)
WHEN EXISTS (SELECT * FROM Table3 t3 WHERE t3.RelatedId = Table1.Id) THEN
(SELECT COUNT(1) FROM Table3 t3 WHERE t3.RelatedId = Table1.Id)
ELSE 0
END AS RelatedCount
FROM Table1
我不喜歡的事實,我基本上執行相同的查詢兩次(在兩種情況下)。有沒有辦法做到我想要的,而只執行一次查詢?
請注意,這是一個更大的查詢的一部分,其中有多個JOIN
s和UNION
s,因此採用完全不同的方法並不容易。
我在努力去理解這一點。既然你加入了'RelatedId',那麼'GROUP'的優點是什麼呢?另外,爲什麼使用'JOIN's?它不是簡單地將COUNT(*)作爲單獨的列嗎? – 2012-01-27 05:37:57
@JonathanWood GROUP BY允許我們計算每個'RelatedId'有多少條記錄。我不遵循你的第二句話。例? – RedFilter 2012-01-27 05:40:48
我想我明白了。在應用「COUNT」之前進行分組,以便「ON」子句返回我們想要的總數。 T-SQL不是我的第一語言,這對我來說看起來很奇怪。運行一些測試... – 2012-01-27 05:51:02