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

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

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


1、测试表

表结构如下:

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


表中数据:

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


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

2、需求:

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

SQL语句如下:

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


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

3、Mysql中case when语法:

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

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

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

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

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


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

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


结果也无法满足需求。

这是为什么呢?

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

记得避坑。

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

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

为您推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注