Я пытаюсь добиться условно присоединиться, как этоУсловный присоединиться
declare @JoinWithT2 bit = 1;
select T1.* from T1
inner join T2 on (@JoinWithT2 = 0 or T1.Id=T2.Id)
Это прекрасно работает, когда я прохожу @JoinWithT2
значение 1 дает мне результат, используя объединение двух таблиц, и когда я прохожу @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
Это не игнорирует e присоединиться. Он всегда присоединяется к таблице. Если JoinWithT2 = 1, то он выполняет правильное соединение (по идентификатору), а если оно равно 0, вы присоединяетесь ко всем записям, эффективно превращая свое соединение в кросс-соединение. Это то, что вы хотите? – GolezTrol
Обратите внимание, что где '@ JoinWithT2' равно 0, первый запрос ** не ** эквивалентен' select T1. * От T1' - вместо этого он становится неявным декартовым соединением - см. Http://sqlfiddle.com/# ! 3/3f574/3 –
Да. На самом деле я хочу проигнорировать объединение, если значение '@ JoinWithT2' равно 0 –