0

当#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 的位置应该被忽略。有任何线索怎么做吗?

4

1 回答 1

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 确定如何最好地计算结果(并在需要时缓存中间形式)

于 2013-04-22T07:08:23.130 回答