当mysql中的表的列存在空值NULL时,你会发现很多结果不符合你的期望,这里面的null值甚至导致你查询不到正常的值的记录。
比如有个表 ta,它有个列为a,a的值存在null、0,1、2、3等,表结构如下图:
你想查询a的值不为3的记录,使用下面的sql
SELECT * FROM ta WHERE a NOT IN (3);
你会发现,空值的记录查询不出,理论上a的值为 null、1、2的记录都要出来,但是你发现只返回了a的值为 1、2的记录,null的值根本查询不出,这不符合我的需求,我的需求是查询a不等于3的所有情况的值都返回。
这种情况如何解决呢?
这里就要用到COALESCE函数了,使用这个函数将a的空值转换为一个常量,比如-1也可以的,sql改造为:
SELECT * FROM ta WHERE COALESCE(a, 0) NOT IN (3);