Условное соединение в SQL (возможно, оператор Case)

#sql #join

Вопрос:

У меня есть две таблицы A и B, и я хотел бы, чтобы таблица A присоединилась к таблице B слева на основе двух условий.

  • Если параметр 1=»a» в таблице B, то слева присоединяйтесь к A. параметр 2=B. параметр 2
  • Если параметр1<>’a’ в таблице B, то левое соединение A. параметр3=B. параметр3

как сделать это условное соединение в SQL?

Я использовал левое соединение B в случае, когда B. 1=»a» , затем A. 2=B. 2, когда B. 1<> «a» , затем A. 3=B. 3

У него всегда есть ошибка рядом с»=».

Комментарии:

1. Пожалуйста, предоставьте достаточно кода, чтобы другие могли лучше понять или воспроизвести проблему.

Ответ №1:

Вы можете просто использовать логику:

 from a left join
     b
     on (b.1 = 'a' and a.2 = b.2) or
        (b.1 <> 'a' and a.3 = b.3)
 

Единственное предупреждение: or как правило, снижает производительность join s, поэтому это может замедлить ваш запрос (очень сильно!) по сравнению с каждым условием в отдельности.