MySQL单表UPDATE语句用HAVING报错,咨询是否需多表及修正方案
问题分析与解决方案
你的问题出在UPDATE语句里错误使用了HAVING子句——HAVING的作用是过滤分组后的聚合结果,必须搭配GROUP BY使用,而你的更新场景不需要对数据分组,直接用WHERE子句就能完成行级筛选,这就是报错的核心原因,完全不需要用到多表更新。
正确的UPDATE语句
直接把所有筛选条件放到WHERE里即可,写法如下:
UPDATE products_test SET price = ROUND(price * 1.06, 0) WHERE brand = 44 AND category IN (20, 22) AND id NOT IN (17466, 17467);
为什么你的SELECT语句能运行?
如果你的SELECT语句用了HAVING还能正常执行,大概率是因为SELECT里搭配了GROUP BY(比如对id、brand等字段做了分组),这时候HAVING是合法的。但UPDATE操作是针对单条数据行的更新,不需要分组逻辑,所以HAVING在这里完全不适用,属于语法误用。
内容的提问来源于stack exchange,提问作者Firststeps
相关产品推荐
相关产品推荐

