MySQL中指定列和为5时更新AP9表Pas列的问题
解决MySQL UPDATE语句的1093错误问题
你的SQL出现1093错误的原因是:MySQL不允许在UPDATE/DELETE操作的WHERE子句中,直接将目标表作为子查询的FROM表引用。另外你的原语句逻辑也不符合需求——用SUM()和HAVING是对全表的列值求和,而不是逐行判断单条记录的ColA到ColE之和是否为5。
正确写法(直接逐行判断)
最简洁的方式是直接在WHERE子句中计算每行的列和,不需要子查询:
UPDATE AP9 SET Pas = 1 WHERE (ColA + ColB + ColC + ColD + ColE) = 5;
复杂场景的替代写法(通过临时表规避限制)
如果后续有更复杂的逻辑需要用到子查询,可以给子查询套一层别名,让MySQL将其视为临时表,绕过目标表引用限制(假设表有唯一主键id):
UPDATE AP9 SET Pas = 1 WHERE EXISTS ( SELECT 1 FROM (SELECT id, ColA+ColB+ColC+ColD+ColE AS total FROM AP9) AS temp_table WHERE temp_table.id = AP9.id AND temp_table.total = 5 );
内容的提问来源于stack exchange,提问作者salawinder
相关产品推荐
相关产品推荐

