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
相关产品推荐
相关产品推荐

