在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