mysql⼊坑之字段同样是空为何不相等?
最近在项⽬中遇到了⼀个问题,是⾮常不起眼的,因为空的判断导致查询出来的数据条数出现了不⼀致的情况,然后我就根据mysql的where条件⼀个⼀个的筛查出,是因为有个字段同样为空,却⽐较时,出现了为false的结果。
如下:travel_type3 为空
如下:travel_type3 为null
问题如下:
修改前的sql为:
下载mysql为什么下载不了select * from exp_oa_appl_header al ,exp_report_oa_header oh,exp_report_header h ,exp_travel_mapping em where al.task_id=oh.task_id and h.oa_he
AND al.travel_type1 = em.travel_type1
avel_type2 = em.travel_type2
avel_type3 = em.travel_type3
quisition_number="BZ202001000498"
因为有了第三个条件 al.travel_type3 = em.travel_type3 导致查询出来的结果没有。
exp_oa_appl_header al 表的travel_type3 字段为空,exp_travel_mapping 的travel_type3 为空,两个字段看起来都为空,实际上有
⼀个字段为空,有⼀个为null,所以导致了这两个字段的不相等。
修改后的sql为:
使⽤了if(exp,true,false) 结合 avel_type2) || LENGTH(avel_type2))<1 判断为空的⽅法,如果2个字段为都为
null或者空,那么则视为相等。
select * from exp_oa_appl_header al ,exp_report_oa_header oh,exp_report_header h ,exp_travel_mapping em where al.task_id=oh.task_id and h.oa_he
avel_type1 = em.travel_type1
AND IF (avel_type2) || LENGTH(avel_type2))<1,"0",al.travel_type2) = IF (avel_type2) || LENGTH(avel_type2))<1,"0", AND IF (avel_type3) || LENGTH(avel_type3))<1,"0",al.travel_type3) = IF (avel_type3) || LENGTH(avel_type3))<1,"0", quisition_number="BZ202001000498"
修改后,发现就可以查询出该条记录:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论