UPDATE查询中用MAX()限制amount不低于0无效,求解决办法
解决方案
因为MySQL中的MAX()是聚合函数,用于对多行数据计算最大值,无法直接用于单行内的数值比较。要实现单行内取amount - 35和0中的较大值,你可以采用以下两种方法:
方法一:使用GREATEST()函数
GREATEST()函数支持接收多个参数,返回其中的最大值,完全匹配你的需求:
UPDATE `table` SET `amount` = GREATEST(`amount` - 35, 0) WHERE `id` IN (26984, 131881, 985550, 985569, 985586, 1086766, 1189724)
方法二:使用CASE语句
如果后续需要扩展更复杂的判断逻辑,CASE分支会更灵活:
UPDATE `table` SET `amount` = CASE WHEN `amount` - 35 >= 0 THEN `amount` - 35 ELSE 0 END WHERE `id` IN (26984, 131881, 985550, 985569, 985586, 1086766, 1189724)
这两种方法都能确保:当amount - 35的结果非负时,更新为计算后的值;若结果为负,则直接设为0,不会触发UNSIGNED字段的负数限制。
内容的提问来源于stack exchange,提问作者Twinny
相关产品推荐
相关产品推荐

