对SQL Server的这种行为感到好奇。IN语句挂起SQL Server中的SELECT子查询
这个查询产生的结果非常快,就像我期望:
SELECT *
FROM dbo.v_View1 View1 FULL OUTER JOIN
dbo.v_View2 View2 ON View1.Portfolio = View2.Portfolio AND
View1.AsOfDate = View2.AsOfDate
where (View1.AsOfDate IN (NULL, '20130717'))
不过,我不希望有一个静态日期在那里,所以我用一个子查询代替它。不幸的是,我已经等待这个查询执行的时间最长为5分钟之前,我取消了,所以我不知道它是否确实会得到我的数据我想:
SELECT *
FROM dbo.v_View1 View1 FULL OUTER JOIN
dbo.v_View2 View2 ON View1.Portfolio = View2.Portfolio AND
View1.AsOfDate = View2.AsOfDate
where (View1.AsOfDate IN (NULL, (SELECT MAX(AsOfDate) FROM dbo.v_View1)))
我使出声明一个变量,用上面的子查询设置它,然后在IN语句中使用它,该语句按预期工作,并且运行速度与原始查询快一样。
我知道我做错了什么或错过了什么(可能两者) - 它是什么?我希望在IN语句中有子查询,或者至少能够将这个作为没有变量的视图运行。谢谢!
看看执行计划。 –