0

私は2つのテーブルを持っています:

      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
4

2 に答える 2