如何创建常量列表并在查询的WHERE子句中使用它?
例如,我有一个配置单元查询,我说
Select t1.Id,
t1.symptom
from t1
WHERE lower(symptom) NOT IN ('coughing','sneezing','xyz', etc,...)
有没有一种方法可以提前定义它,而不是继续重复这长长的症状列表(这使得代码非常难看)
MyList =('咳嗽','打喷嚏','x',......)
然后在WHERE子句中我只是说在MyList中没有更低的(症状)。
答案 0 :(得分:1)
您可以将列表放在表格中并使用join
:
Select t1.Id, t1.symptom
from t1
where lower(symptom) NOT IN (select symptom from mysymptoms_list);
这会保留列表,因此可以在多个查询中使用。
答案 1 :(得分:0)
如果您对连接感到满意,可以在where子句中使用左连接:
// Add the event listener
chart.addListener("init", zoomChart);
function zoomChart(e) {
var chart = e.chart;
var dataProvider = chart.dataProvider;
// Zoom to the last 60 data items
e.chart.zoomToIndexes(dataProvider.length - 60, dataProvider.length - 1);
}
此查询将保留一列中表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;
的所有症状(A.symptom)和表t1
对应的第二列(B.symptom),其值将与如果找到匹配项,则为t1中的症状;如果未找到匹配项,则为NULL。
你想要找不到匹配的那些,因此是where子句。
答案 2 :(得分:0)
您可以使用hive变量执行此操作。
SET hivevar:InClause=('coughing','sneezing','x',...)
确保你不要在平等的任何一边留下空格。
SELECT t1.Id,
t1.symptom
FROM t1
WHERE LOWER(symptom) NOT IN ${InClause}