2014-05-17 2 views
1

Я пытаюсь добавить условное левое или внутреннее соединение на основе параметра в моей инструкции select.Как добавить условное левое или внутреннее соединение на основе параметра в SQL?

Например:

У меня есть TABLEA и TableB, и у меня есть параметр, называемый @test,

Я хочу сделать что-то вроде этого:

IS, что возможно в SQL Server 2012?

ответ

2

Не совсем (за исключением использования динамического SQL), но вы можете сделать это в where пункте:

SELECT * 
FROM TableA LEFT OUTER JOIN 
    TableB 
    ON . . . 
WHERE (@test = '' and TableB.id is not null) or (@test <> '') 
4

Вы не можете изменить вид на JOIN на основе параметра, но вы можете отфильтровать строки с NULL s во внешнем соединении.

Предположим, что TableB присоединен к TableA по адресу b.a_id = a.id. Тогда вы можете написать запрос:

SELECT * FROM TableA a 
LEFT OUTER JOIN TableB b 
      ON b.a_id = a.id 
WHERE @test != '' OR b.a_id IS NOT NULL 
+0

Итак, динамический SQL - это решение, упомянутое Гордоном Линоффом? – user123456

+0

@Mohammadjouhari Dynamic SQL - это * a * решение, а не * решение *. Оба наших ответа очень идентичны, предлагая добавить условный фильтр 'WHERE', который превращает внешнее соединение во внутреннее соединение. – dasblinkenlight

+0

Спасибо за вас за ответы. Я ценю это. – user123456

Смежные вопросы