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