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

MySQL如何更新两个字段中的非空字段?求简洁实现方案

解决方案

你原来的写法问题出在SET子句的左侧不能是表达式,MySQL要求这里必须是明确的列名,所以直接用IF(...) = 1234这种语法不合法。

下面给你两种简洁的实现方式,满足你的需求:

方式一:用IF函数(最简洁)

UPDATE `table`
SET 
  `FieldA` = IF(`FieldA` IS NOT NULL, '1234', `FieldA`),
  `FieldB` = IF(`FieldB` IS NOT NULL, '1234', `FieldB`)
WHERE `FieldC` = '5678'
AND (`FieldA` = '1234' OR `FieldB` = '1234');

逻辑很直接:对每个字段判断,只要它非空就更新为1234,否则保持原值。因为已知两个字段必有一个非空,所以总会有一个字段被修改,另一个不受影响。

方式二:用CASE语句(更直观)

如果你觉得CASE可读性更好,也可以这么写:

UPDATE `table`
SET 
  `FieldA` = CASE WHEN `FieldA` IS NOT NULL THEN '1234' ELSE `FieldA` END,
  `FieldB` = CASE WHEN `FieldB` IS NOT NULL THEN '1234' ELSE `FieldB` END
WHERE `FieldC` = '5678'
AND (`FieldA` = '1234' OR `FieldB` = '1234');

两种写法效果完全一致,选你觉得顺手的就行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 07:24:20