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)

そして今ケース。テーブルの 1 つが空のときにイチュエーションがある場合、結果は生成されません。
#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 に対してかなりの手続き型のアプローチを取っているように見えます。通常は、目的の結果全体を 1 つのクエリとして記述し、SQL Server に結果の最適な計算方法を判断させる (必要に応じて中間フォームをキャッシュする) ことをお勧めします。

于 2013-04-22T07:08:23.130 に答える