Соединение при условии, если значения столбцов равны только, иначе другое условие соединения - PullRequest
0 голосов
/ 31 марта 2020

Я хотел бы объединить две таблицы, если значения равны, если не сделать второе объединение в другом столбце

  1. для записей, где a.column_1 = b.column_2 (равны), используйте объединение на a.column_1 = b.column_2
  2. для записей, где a.column_1 <> b.column_2 использует новое объединение a.column_3 = b.column_2

Возможен ли такой подход? Если так, пожалуйста, помогите.

Ответы [ 3 ]

0 голосов
/ 31 марта 2020

Один метод использует два left join s.

select ...
from a
left join b b2 on b2.col2 = a.col2
left join b b3 on b3.col3 = a.col3
where b2.col2 is not null or b3.col3 is not null

Это позволяет избежать «умножения» строк, когда оба условия совпадают. Затем вы можете обратиться к столбцам с coalesce(), отдав приоритет b2.

select a.*, coalesce(b2.col4, b3.col4) b_col4, coalesce(b2.col5, b3.col5) b_col5
from a
left join b b2 on b2.col2 = a.col2
left join b b3 on b3.col3 = a.col3
where b2.col2 is not null or b3.col3 is not null
0 голосов
/ 31 марта 2020

Это часто делается с двумя join с (и coalesce()):

select a.*,
       coalesce(b1.col3, b2.col3) as col3
from a left join
     b b1
     on a.column_1 = b1.column_2 left join
     b b2
     on a.column_3 = b2.column_2 and b1.column_2 is null
where b1.column_2 is not null or b2.column_2 is not null;
0 голосов
/ 31 марта 2020

попробуй

SELECT *
FROM 
  TABLE_A AS A
, TABLE_B AS B
WHERE
    ( a.column_1 =  b.column_2 )
OR  ( a.column_1 <> b.column_2 AND a.column_3 = b.column_2 )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...