2015-10-23 5 views
1

У меня есть таблицы t1:саз, который должен проверить через другую таблицу

pers_key code1 code2 
     1  AA  BB 
     2  AA  CC 
     3  AA  DD 
     4  BB  CC 
     5  BB  DD 
     6  CC  DD  

И еще одна таблица t2:

code ind_A ind_B ind_C 
    AA  1  0  0 
    BB  0  1  0 
    CC  0  0  1 
    DD  1  0  1 

Я хочу присоединиться к этим таблицам вместе с тем, что для каждой записи t1, мы добавляем столбцы ind_A, ind_B, ind_C и устанавливаем их в 1, если соответствующий код указывает его. Например, это будет мой идеальный выходной таблице:

pers_key code1 code2 ind_A ind_B ind_C 
     1  AA  BB  1  1  0 
     2  AA  CC  1  0  1 
     3  AA  DD  1  0  1 
     4  BB  CC  0  1  1 
     5  BB  DD  1  1  1 
     6  CC  DD  1  0  1 

Таким образом, для каждого t1 записи, мы устанавливаем аким 1, если его code1 ИЛИ code2 имеет аким как 1 в другой таблице t2. Каким будет лучший способ достичь этого результата? Имейте в виду, что это всего лишь образец, чтобы получить идею/метод, в моих фактических данных есть сотни разных значений кода. Я использую версию HIVE/hiveQl 0.12.

ответ

2

Куст не поддерживает подзапросы в предложении SELECT. Но, вы можете сделать это с помощью объединений:

select t1.*, 
     (case when t2a.ind_A = 1 or t2b.ind_A = 1 then 1 else 0 end) as ind_A, 
     (case when t2a.ind_B = 1 or t2b.ind_B = 1 then 1 else 0 end) as ind_B, 
     (case when t2a.ind_C = 1 or t2b.ind_C = 1 then 1 else 0 end) as ind_C 
from t1 left join 
    t2 t2a 
    on t1.code1 = t2a.code left join 
    t2 t2b 
    on t1.code2 = t2b.code; 

Примечание: это должно работать даже для кодов, которые не соответствуют t2

Смежные вопросы