避坑 | MySQL中case when对于NULL值判断的小坑

128次阅读
没有评论

共计 622 个字符,预计需要花费 2 分钟才能阅读完成。

有开发小哥咨询了一个问题,挺有意思的,记录一下分享给有需要的朋友。

从MySQL中过滤数据的时候,使用到了case when的语法用来做判断,在对NULL值做判断的时候遇到个小问题。

1、测试表

表结构如下:

避坑 | MySQL中case when对于NULL值判断的小坑

表中数据:

避坑 | MySQL中case when对于NULL值判断的小坑

说明:ID=2,name为空字符,ID=3,name为NULL

2、需求:

如果name为空字符则输出TEST,为null则输出PROD。

SQL语句如下:

避坑 | MySQL中case when对于NULL值判断的小坑

这个判断null条件有问题,理想的结果第3条记录为3 PROD ,但是却为空。

3、Mysql中case when语法:

避坑 | MySQL中case when对于NULL值判断的小坑

注意: 这两种语法是有区别的,区别如下:第一种语法:case_value必须是一个表达式或字段名,例如 name或name is null等。

第二种语法CASE后面不需要变量或者表达式,直接执行时候评估每一个WHEN后面的条件,如果满足则执行。

那么针对上面的查询需求,我们就可以调整成语法2的语法格式:

避坑 | MySQL中case when对于NULL值判断的小坑

除了最开始的SQL语句无法满足需求,下面我们再来看下面一个SQL语句,同样也存在问题,大家在使用中要注意;
SQL如下:

避坑 | MySQL中case when对于NULL值判断的小坑

结果也无法满足需求。

这是为什么呢?

出现这个错误的原因是将第一种语法与第二种语法混用导致的,case 后面的case_value 的值有两种:真实值或者为null,而 when 后面的条件也有两个值:true或者false,所以出现查询结果和实际不匹配的情况;

记得避坑。

觉得本文有用,请转发、点赞或点击“在看”聚焦技术与人文,分享干货,共同成长更多内容请关注“数据与人”

避坑 | MySQL中case when对于NULL值判断的小坑
正文完
 0
数据与人
版权声明:本站原创文章,由 数据与人 于2022-12-14发表,共计622字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,若要转载请注明出处。
评论(没有评论)