У меня есть две таблицы:Альтернативная логика подзапроса как часть условия
T1
key code1 code2 code3
1 A A A
2 B B G
3 A B C
4 C C C
5 D E F
6 E E E
7 A D G
8 G G G
T2
code class1 class2 class3
A 1 0 0
B 0 1 0
C 0 1 0
D 1 1 0
E 0 0 1
F 0 1 0
G 1 0 0
Я хочу написать запрос как ...
create table T3 as
select key, case
when code1 in (select code from T2 where class1 = 1) or
code2 in (select code from T2 where class1 = 1) or
code3 in (select code from T2 where class1 = 1)
then 1 else 0
end as class1,
case
when code1 in (select code from T2 where class2 = 1) or
code2 in (select code from T2 where class2 = 1) or
code3 in (select code from T2 where class2 = 1)
then 1 else 0
end as class2,
case
when code1 in (select code from T2 where class3 = 1) or
code2 in (select code from T2 where class3 = 1) or
code3 in (select code from T2 where class3 = 1)
then 1 else 0
end as class3
from T1
Это в основном говорят, для каждого ключа в T1, посмотрите, соответствует ли соответствующий код в T2 1 для каждого класса. Если это так, то новый столбец равен 1.
Проблема в том, что я использую версию HiveQL, которая не поддерживает подзапросы в условных операторах вроде этого. Существует ли альтернативный метод для достижения одного и того же набора результатов? Я думал о чем-то вроде присоединения, но я не уверен в лучшем способе сделать это в этом случае из-за того, что T2 не имеет соответствующего ключа.
Для справки, результирующий набор будет
T3
key class1 class2 class3
1 1 0 0
2 1 1 0
3 1 1 0
4 0 1 0
5 1 1 1
6 0 0 1
7 1 1 0
8 1 0 0
Я не верю, что это сработает, так как вы получите более одного результата для каждого ID. –
Возможно, отдельный или макс для каждого случая решает проблему. –
Distinct не сработает. Max должен хотя бы – JamieD77