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

MySQL中使用SELECT查询结果批量更新同表符合条件行的写法是否正确?

问题解答

原SQL写法错误,无法实现预期效果

错误点

  • 语句中的子查询SELECT DATE_FORMAT(bdate, '%i') FROM newser会返回newser全表所有行的bdate分钟值,执行时会触发子查询返回行数超过1的报错;即使添加限制使子查询返回单行,取到的也不是当前待更新行对应的bdate值,不符合逐行取当前行字段计算相加的需求。
  • 注意字段名对齐:需求中要更新的是total_rating字段,示例中对应字段为total_result,实际执行前请确认实际表的字段名。

正确SQL写法

推荐方案(语义清晰,性能更优)

直接使用MySQL内置MINUTE()函数提取时间的分钟数值,无需子查询,直接引用当前行字段计算:

UPDATE newser 
SET total_rating = total_rating + MINUTE(`bdate`)
WHERE bdate >= NOW() - INTERVAL 12 HOUR 
  AND usertext = 'maxer12';

兼容DATE_FORMAT写法的方案

如果需要保留DATE_FORMAT用法,同样不需要子查询,直接引用当前行的bdate字段即可:

UPDATE newser 
SET total_rating = total_rating + DATE_FORMAT(`bdate`, '%i')
WHERE bdate >= NOW() - INTERVAL 12 HOUR 
  AND usertext = 'maxer12';

逻辑说明

两种写法均对匹配WHERE条件的每行数据,读取该行自身的bdate字段计算得到分钟值,再加到该行的total_rating字段上,完全符合预期的逐行相加效果。


内容的提问来源于stack exchange,提问作者Jarosław Król

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 18:00:04