【问题描述】
当使用了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)
解决问题!
【参考】
(仅供个人学习,不负责任~~~)