Mysql 使用not in进行数据筛选是需要主要的事项
在使用MySQL的NOT IN语句时,如果找不到NULL值,可能是因为NULL值在比较中具有特殊性质。NULL值不等于任何其他值,包括它自己。因此,使用NOT IN语句时,如果列表中包含NULL值,则查询不会返回任何结果。
解决此问题的方法之一是使用IS NULL或IS NOT NULL运算符来检查NULL值。以下是一个示例查询:
SELECT * FROM table_name WHERE column_name IS NULL;
示例:
select major_pos_bu_id,major_pos_company_code,count( emp_id) as j_emp_cunts from hr_dm_mask.dm_current_roster job
left join hr_ods_mask.s_chr_stu_law_company lc
on job.major_pos_company_code = lc.law_company_id
and lc.deleted = 0
and lc.eff_status ='A'
where emp_status = '在职'
and major_pos_emp_record = '兼岗'
and major_pos_action not in ('兼岗结束','离休','退休','离职')
and major_pos_company_code is not null
SQL:
select major_pos_bu_id,major_pos_company_code,count( emp_id) as j_emp_cunts from hr_dm_mask.dm_current_roster jobleft join hr_ods_mask.s_chr_stu_law_company lc on job.major_pos_company_code = lc.law_company_id and lc.deleted = 0and lc.eff_status ='A' where emp_status = '在职'and major_pos_emp_record = '兼岗'and major_pos_action not in ('兼岗结束','离休','退休','离职')and major_pos_company_code is not null
这个and major_pos_action not in ('兼岗结束','离休','退休','离职')
的目的是想过滤掉不等于'兼岗结束','离休','退休','离职'的数据,
但值得注意的是:
但是这里有个严重的BUG的
语句会同时过滤掉等于NULL的数据。
实际上我们需要保留NULL的数据,那就需要这样处理
and (major_pos_action not in ('兼岗结束','离休','退休','离职') or major_pos_action is NULL)