Есть ли способ сделать соединение с делами

Есть ли способ объединить дела?

Что-то вроде

select * from abba 
   case when a=b then 
      join acdc on abba.id=acdc.id
   when b=c then 
      join bebop on abba.id=bebop.id 
   end

Есть ли способ сделать это?

С наилучшими пожеланиями Джо

2 ответа

Решение

Обычный способ сделать это - ЛЕВАТЬ СОЕДИНИТЬ обе таблицы и выбрать значение на основе условия CASE:

SELECT *, CASE WHEN a=b THEN acdc.myField ELSE bebop.myField END AS myField
  FROM abba 
       LEFT JOIN acdc ON abba.id=acdc.id 
       LEFT JOIN bebop ON abba.id=bebop.id

Если запрос не является динамическим, то нет case оператор возвращает только буквальное значение, такое как string, int или другие типы данных.

Но есть обходной путь - динамический sql. Вы рассматриваете весь оператор как строку. Тогда вы можете работать с вашими делами внутри строки.

Например:

declare @query varchar(1000)
set @query = 'select * from abba '+
                case when @a=@b then 'join acdc on abba.id=acdc.id'
                     when @b=@c then 'join bebop on abba.id=bebop.id'
                end
exec(@query)

Но, конечно, ваш a = b & b = c должен быть некоторой переменной sql.

Другие вопросы по тегам