このような条件付き結合を実現しようとしています
declare @JoinWithT2 bit = 1;
select T1.* from T1
inner join T2 on (@JoinWithT2 = 0 or T1.Id=T2.Id)
値 1を渡す@JoinWithT2
と、両方のテーブルの結合を使用して結果が得られ、@JoinWithT2
値 0 を渡すと、結合を無視して T1 からのすべての結果が返されます。
これはすべてうまく機能していますが、上記もこのように達成できるため、パフォーマンスが心配です
if @JoinWithT2=0
begin
select T1.* from T1
end
else
begin
select T1.* from T1
inner join T2 on (T1.Id=T2.Id)
end
条件付き結合を達成するための最良の方法は何ですか?最初の方法と2番目の方法は?
個人的には、最初のクエリが T2 を使用している可能性がある一方で、T2 をまったく使用しないため、2 番目のクエリの方がパフォーマンスが向上するはずだと感じています。