有开发小哥咨询了一个问题,挺有意思的,记录一下分享给有需要的朋友。
从MySQL中过滤数据的时候,使用到了case when的语法用来做判断,在对NULL值做判断的时候遇到个小问题。
1、测试表
表结构如下:
表中数据:
说明:ID=2,name为空字符,ID=3,name为NULL
2、需求:
如果name为空字符则输出TEST,为null则输出PROD。
SQL语句如下:
这个判断null条件有问题,理想的结果第3条记录为3 PROD ,但是却为空。
3、Mysql中case when语法:
注意: 这两种语法是有区别的,区别如下:第一种语法:case_value必须是一个表达式或字段名,例如 name或name is null等。
第二种语法CASE后面不需要变量或者表达式,直接执行时候评估每一个WHEN后面的条件,如果满足则执行。
那么针对上面的查询需求,我们就可以调整成语法2的语法格式:
除了最开始的SQL语句无法满足需求,下面我们再来看下面一个SQL语句,同样也存在问题,大家在使用中要注意;
SQL如下:
结果也无法满足需求。
这是为什么呢?
出现这个错误的原因是将第一种语法与第二种语法混用导致的,case 后面的case_value 的值有两种:真实值或者为null,而 when 后面的条件也有两个值:true或者false,所以出现查询结果和实际不匹配的情况;
记得避坑。
觉得本文有用,请转发、点赞或点击“在看”聚焦技术与人文,分享干货,共同成长更多内容请关注“数据与人”