为何使用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
相关产品推荐
相关产品推荐

