- 今天帮同事看他的一个bug的时候又遇到这个问题,记录一下(之前自己遇到的时候忘记记录了~)
问题:
- 某列存在null值,关联表太多且对数据不熟悉,导致了个小bug
- 查询数据的时候not in + in的条数不等于总条数
复现:
drop table bi_temp.temp_hzy_20221021;
create table bi_temp.temp_hzy_20221021 as
select 1 as id,'张三' union all
select 2 as id,'李四' union all
select 3 as id,'王五' union all
select null as id,'赵六' union all
select null as id ,'孙七'
;
select * from bi_temp.temp_hzy_20221021;
select *
from bi_temp.temp_hzy_20221021
where id not in (1,2)
;
select *
from bi_temp.temp_hzy_20221021
where id not in (1,2)
;
原因:
- hive的where条件中使用的not in 或者in时,隐藏了 is not null 的条件
解决
- not in条数 + in 条数再加上 is null 就能等于总数
- 也就是说
select *
from bi_temp.temp_hzy_20221021
where id not in (1,2)
;
等价于
select *
from bi_temp.temp_hzy_20221021
where id not in (1,2) and id is not null
;