hive--解决使用not in之后返回数据为空的问题

【问题描述】

当使用了not in 之后,发现查询返回的数据为空。

举例:

select *
from ht_insurance_data
where c_insurance_record_description not in ('基数补缴','滞纳金补收','补收利息(复利)','补收记录','欠款补缴','差额调整','个人缴利息'
,'单位缴利息','差额调整','缴费基数调整补收','差额补收记录','缴费工资调整','统一缴费基数补差','退收记录','补收(核入月结算)','工龄补缴','欠缴补收')

我们的目的是删除部分不符合的描述,但是,结果会发现,查询的结果为空,但明明有些描述是不在删除范围内的啊?

【原因分析】

查看c_insurance_record_description这个字段就会发现,里面含有空值(null),问题可能就在此。在hive中,null的含义是“unknown”,它无法与我们罗列的那些描述相比较,从而导致了问题的出现。

【解决办法】

在限制非空的情况下使用not in 操作

select *
from ht_insurance_data
where ((c_insurance_record_description is not null and c_insurance_record_description not in ('基数补缴','滞纳金补收','补收利息(复利)','补收记录','欠款补缴','差额调整','个人缴利息','单位缴利息','缴费基数调整补收','差额补收记录','缴费工资调整','统一缴费基数补差','退收记录','补收(核入月结算)','工龄补缴','欠缴补收'))
       or c_insurance_record_description is null)

解决问题!

【参考】

“not in查询不出数据问题” 点击打开链接

(仅供个人学习,不负责任~~~)

你可能感兴趣的:(数据库,hive,sql菜菜鸟)