Включается в условный оператор в SQL Query - PullRequest
1 голос
/ 07 октября 2009

У меня есть сценарий, как, мне нужно добавить свое соединение в условном

например. Если значение равно 1, то внутреннее соединение с таблицей a, а если значение 2, то внутреннее соединение с таблицей

ниже - мой пример запроса, и я получаю ошибку Неверный синтаксис рядом с ключевым словом "inner"

DECLARE @i INT=1
select name from emp
if(@i=1) 
begin
inner join a on a.ID=emp.ID
end
else if(@i=1) 
begin
inner join b on b.ID=emp.ID
end
where emp.ID=2

Спасибо

Ответы [ 2 ]

4 голосов
/ 07 октября 2009

Будет ли это работать? Внешнее объедините обе таблицы в обоих условиях и поместите условие в предложение select следующим образом:

select name, case when @i=1 then a.column else b.column end from emp
left outer join a on a.ID=emp.ID
left outer join b on b.ID=emp.ID
where emp.ID=2
0 голосов
/ 07 октября 2009

Как вы узнали, эта конструкция недопустима в SQL. Оператор IF нельзя включить в запрос DML. Можно, однако, написать два отдельных запроса (внося в процесс немного дублирования) и иметь один или другой условно выбранный .

DECLARE @i INT
SET @i=1
if(@i=1) 
  begin
      select name from emp
      inner join a on a.ID=emp.ID
      where emp.ID=2
  end
  else if(@i=2) 
  begin
      select name from emp
      inner join b on b.ID=emp.ID
      where emp.ID=2
  end
...