2017-11-11 5 views
0

定数リストを作成し、それをクエリのWHERE句で使用するにはどうすればよいですか?ハイブクエリ:文字列のリストである変数を定義する

は、例えば、私は私が代わりに(コード非常に醜いになります)、症状のこの長いリストを繰り返し続けるの

Select t1.Id, 
     t1.symptom 
from t1 
WHERE lower(symptom) NOT IN ('coughing','sneezing','xyz', etc,...) 

を言うハイブクエリを、持っている、先のことを定義する方法があります

MYLIST =( '咳'、 'くしゃみ'、 'X'、...)

句は、私はちょうどWHERE(症状)下ではないマイリストに言うと思いますWHEREで

、その後のような時間。

+0

リストをテーブルに配置し、 'join'を使用することができます。 –

答えて

1

あなたがテーブルにリストを入れてjoinを使用することができます。

Select t1.Id, t1.symptom 
from t1 
where lower(symptom) NOT IN (select symptom from mysymptoms_list); 

これは、リストを持続するので、複数のクエリで使用することができます。

0

あなたが参加するに慣れている場合は、WHERE句で結合し、左を使用することができます。

Select t1.Id, t1.symptom 
from 
t1 A left join MyList B 
on 
lower(A.symptom) = lower(B.symptom) 
where lower(B.symptom) IS NULL; 

このクエリは、1列にテーブルt1からすべての症状(A.symptom)を保持し、第二のカラムのためになりますテーブルMyListに対応する値(B.symptom)は、一致した場合はt1の症状と同じ値になり、一致しない場合はNULLになります。

一致が見つからない場所、つまりwhere句が必要です。

0

これを行うには、ハイブ変数を使用できます。

SET hivevar:InClause=('coughing','sneezing','x',...) 

平等の両側にはスペースを入れないでください。

SELECT t1.Id, 
     t1.symptom 
FROM t1 
WHERE LOWER(symptom) NOT IN ${InClause} 
関連する問題