Соединения основаны на условии по столбцам - PullRequest
0 голосов
/ 18 марта 2020

У меня есть 2 таблицы с нижними столбцами

Table1

col1   col2   col3     val
 11     221     38      10
null    90      null     989
78     90       null     77

table2

col1   col2   col3  
 12     221    78
 23     null   67 
 78      90     null

Я хочу вывод, подобный этому

col1   col2   col3     val     matchingcol
 11     221     38      10       col2
null    90      null     null      null
78     90       null     77       col1

Я хочу объединить 2 таблицы в первом столбце col1, если значения совпадают, а затем прекратить, если не объединить в col2, если совпадения прекратятся, в противном случае объединиться в col3 и заполнить val, если любой из столбцов совпадает с пустым, и когда сопоставляются все столбцы, а затем заполнить этот столбец в столбце matchcol

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

1 Ответ

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

Вы можете использовать несколько объединений:

select t1.*,
       (case when t2_1.col1 is not null then 'col1'
             when t2_1.col2 is not null then 'col2'
             when t2_1.col3 is not null then 'col3'
        end) as matchingcol
from table1 t1 left join
     table2 t2_1
     on t2_1.col1 = t1.col1 left join
     table2 t2_2
     on t2_2.col2 = t1.col2 and t2_1.col1 is null left join
     table2 t2_3
     on t2_3.col3 = t1.col3 and t2_2.col2 is null
...