如何在MySQL中为不同行的同一列减去不同数值?
实现MySQL不同行更新同一列减不同数值的方法
方法一:使用CASE条件表达式
这是针对少量行最直接的实现方式,通过CASE语句根据id匹配对应的减法规则:
UPDATE `posts` SET `calc` = CASE WHEN `id` = 1 THEN calc - 1 WHEN `id` = 2 THEN calc - 2 END WHERE `id` IN (1, 2);
WHERE子句限定只更新目标行,避免无关数据被误修改;CASE分支会逐行匹配id,执行对应的数值减法。
方法二:使用JOIN关联更新
如果需要更新的行数量较多,或者规则可以通过数据集定义,用JOIN的方式扩展性更强:
UPDATE `posts` JOIN ( SELECT 1 AS id, 1 AS subtract_val UNION ALL SELECT 2 AS id, 2 AS subtract_val ) AS update_data ON `posts`.`id` = update_data.id SET `posts`.`calc` = `posts`.`calc` - update_data.subtract_val;
通过子查询构造包含id和对应要减数值的临时数据集,与原表关联后直接批量执行更新。后续需要新增规则时,只需在子查询里添加UNION ALL的行即可。
内容的提问来源于stack exchange,提问作者Ft Games
相关产品推荐
相关产品推荐

