SQL JOIN - сопоставляет значение из одной таблицы с ее эквивалентом в другой во время JOIN - PullRequest
0 голосов
/ 05 июня 2018

У меня есть следующий сценарий:

Table 1 - Holds product meta data about products.
Table 2 - Holds sales data about the products.

Каждая таблица имеет уникальный идентификатор для продуктов, однако по историческим причинам идентификаторы в таблицах отличаются.Например:

In Table 1, "Red Hat" -> 1
In Table 2, "Red Hat" -> 3.

Я хочу соединить таблицу 2 с таблицей 1 и сопоставить строки на основе идентификатора продукта.

Есть ли способ «сопоставить» эти значения, чтобы все строки с Id 3 в таблице 2 были сопоставлены со всеми строками таблицы 1 с Id 1?

1 Ответ

0 голосов
/ 07 июня 2018

Используйте оператор case в предложении объединения ON для сопоставления.

Демонстрация.

Подготовка таблиц:

hive> create table testt1 as select 1 as key;
hive> create table testt2 as select 3 as key;

Регистрация с использованием кейса:

 select t1.key, t2.key 
   from testt1 t1 
        left join testt2 t2 
        on t2.key=case when t1.key=1 then 3 --add more cases 
                      --when t1.key=<some value> then <mapped value>
                        else t1.key          --default mapping t1.key=t2.key 
                  end
  ;

Результат:

OK
1       3
Time taken: 41.191 seconds, Fetched: 1 row(s)
...