当#tmp表为空时,我试图忽略我的位置。
像:
create table #tmp
(
my_id int
)
create table #tmp2
(
my_name_id int
)
select * from foo
where foo_id in (select my_id from #tmp)
and foo_name_id in (select my_name_id from #tmp2)
现在的情况。 当其中一个表为空时我们有了它,它将不会产生任何结果 #tmp不是空的 #tmp1为空
所以我应该忽略#tmp1的位置。 有什么线索怎么做?
答案 0 :(得分:1)
只需添加其他条件:
select * from foo
where (foo_id in (select my_id from #tmp) or not exists(select * from #tmp))
and (foo_name_id in (select my_name_id from #tmp2) or not exists(select * from #tmp2))
然而,您采用的一般形式使您看起来像是采用了相当程序化的SQL方法,在那里您将部分结果存储在临时表中,然后将它们组合在一起结束。将整个所需结果作为单个查询编写通常会更好,让SQL Server计算出如何最好地计算结果(并在需要时缓存中间表单)