You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何使用CASE语句的SQL UPDATE操作会产生NULL值?

问题原因及解决办法

没错,就是因为缺少ELSE子句导致的。SQL的CASE语句在没有匹配到任何WHEN条件时,默认返回NULL,所以那些没被匹配的行,field1就被赋值为NULL了。

修复后的脚本(保留未匹配行原值)

UPDATE configsystem 
SET field1 = CASE
                 WHEN field2 =  32 THEN 0
                 WHEN field1 =  67 THEN 0
                 WHEN field1 =  99 THEN 1
                 WHEN field1 = 102 THEN 0
                 WHEN field1 = 105 THEN 5
                 ELSE field1  -- 新增该子句,让未匹配的行保持field1原有值
             END
WHERE 1 = 1

更优写法(仅更新需要修改的行)

你的WHERE 1=1会触发全表更新,其实可以把匹配条件移到WHERE子句中,只处理需要修改的行,避免无意义的更新操作:

UPDATE configsystem 
SET field1 = CASE
                 WHEN field2 =  32 THEN 0
                 WHEN field1 =  67 THEN 0
                 WHEN field1 =  99 THEN 1
                 WHEN field1 = 102 THEN 0
                 WHEN field1 = 105 THEN 5
             END
WHERE field2 = 32 
   OR field1 IN (67, 99, 102, 105)

内容的提问来源于stack exchange,提问作者Steve Mueller

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 22:13:12