对 SQL Server 的这种行为感到好奇。
正如我所期望的那样,此查询非常快速地产生结果:
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 语句中包含子查询,或者至少能够将其作为没有变量的视图运行。谢谢!