Есть ли способ сделать соединение с делами
Есть ли способ объединить дела?
Что-то вроде
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.