Если идентификатор транзакции не равен нулю, присоединиться к идентификатору транзакции, иначе присоединиться к идентификатору пользователя - в том же соединении? - PullRequest
0 голосов
/ 11 июля 2020

Я хотел бы выполнить одно левое соединение из таблицы a в таблицу b по идентификатору транзакции

select a.*, b.*
from tablea a
left join tableb b on b.transaction_id = a.transaction_id

Однако бывают случаи, когда идентификатор транзакции в любой таблице отсутствует, и в этом случае я хотел бы вернуться к присоединению к a.user_id = b.user_id. Если user_id также отсутствует, тогда хорошо, я все равно хочу сохранить все записи из.

Есть ли способ сказать postgres попробовать присоединиться к одному полю, и если он отсутствует в какой-либо таблице, затем попробовать присоединение к другому полю?

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

1 Ответ

1 голос
/ 11 июля 2020

Добавьте второе соединение к tableb с условием, что первое соединение не соответствует:

select a.*, 
  coalesce(b1.col1, b2.col1), coalesce(b1.col2, b2.col2), ..... 
from tablea a 
left join tableb b1 on b1.transaction_id = a.transaction_id
left join tableb b2 on b2.user_id = a.user_id and b1.transaction_id is null
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...