Мне нужно написать SQL-запрос для следующего сценария.если b.field1 = 123, то в моем запросе должно быть условие ON для внутреннего соединения, подобное этому.
select a.field1, a.field2, a.field3, b.field1, b.field2, b.field3
from a
inner join b on (a.field1 = b.field1 or a.field1='abc' or field1='def')
where b.field1 = 123 and a.field2 = 'W'.
, если значение b.field1 отличается от 123, то в моем запросе должно быть условие ON для diff внутреннего соединения.
select a.field1, a.field2, a.field3, b.field1, b.field2, b.field3
from a
inner join b on (a.field1 = b.field1)
where b.field1 = 234 and a.field2 = 'W'.
Основываясь на b.field1, мне нужно иметь другое условие ON для внутреннего соединения.Я не хочу писать 2 запроса.Я пытался использовать case, но мне было трудно реализовать его, получая синтаксические ошибки.Может ли кто-нибудь с опытом работы с SQL посоветовать мне, как мне написать это в 1 запросе.
Я пробовал что-то подобное, но у меня есть 2 проблемы, IN не допускается при использовании case, а также в THEN & ELSEчасть CASE, позволяет мне использовать любое из выбранных полей ( a.field1, a.field2, a.field3, b.field1, b.field2, b.field3 ).
select a.field1, a.field2, a.field3, b.field1, b.field2, b.field3
from a
inner join b on a.field1 in
case when b.field1 <> 123
then
(b.field1)
else
(b.field1, 'abc', 'def')
end
where b.field1 = 123 and a.field2 = 'W'.
Я публикую ответ, так как он может кому-нибудь помочь.
select a.field1, a.field2, a.field3, b.field1, b.field2, b.field3
from a
inner join b on ((b.field1 <> 123 and a.field1=b.field1)
or (b.field1=123 and a.field1 in (b.field1, 'abc', 'def')))
where b.field1 = 123 and a.field2 = 'W'.