我有两张桌子:
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