mysql update 使用 WHEN/THEN/ELSE/END 的时候非WHEN的数据被改成null

本文介绍了一种使用SQL CASE语句来更新特定记录状态的方法,并通过实际案例解释如何避免遗漏未匹配条件的数据行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

先查看一下数据

 

SELECT b.email_remind_id,b.send_status FROM b_email_msg_remind  b;


 然后执行

UPDATE b_email_msg_remind 
SET 
    send_status =CASE 
        WHEN email_remind_id = '234746e8-4cab-444c-86ee-ea73c57cb7de' THEN 1 
        WHEN email_remind_id = '48d4a578-141e-421c-9eed-0c26de4b8f48' THEN 1  
        WHEN email_remind_id = '674969cd-ae86-4a5c-b813-57cc6183f8e5' THEN 1
        WHEN email_remind_id = '991664d6-4fe3-47c7-add7-e861f617992d' THEN 1
        END

 

工具的日志为:


 看到修改了5行数据,但是只有4个WHEN

修改后的数据是



 这个没有WHEN的条件的数据send_status被改成了null

 

我们现在加上ELSE

SELECT b.email_remind_id,b.send_status FROM b_email_msg_remind  b;

 

 然后执行

UPDATE b_email_msg_remind 
SET 
    send_status =CASE 
        WHEN email_remind_id = '234746e8-4cab-444c-86ee-ea73c57cb7de' THEN 1 
        WHEN email_remind_id = '48d4a578-141e-421c-9eed-0c26de4b8f48' THEN 1  
        WHEN email_remind_id = '674969cd-ae86-4a5c-b813-57cc6183f8e5' THEN 1
        WHEN email_remind_id = '991664d6-4fe3-47c7-add7-e861f617992d' THEN 1 ELSE send_status END

工具的日志为:


可以看到这次只有4条数据被修改
修改后的数据是



 

红框的数据没有被修改

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值