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

SQL如何在WHERE条件中使用AVG()?更新表出现1093错误怎么处理?

错误原因

该报错是MySQL的特有限制:对一张表执行UPDATE操作时,不允许直接在子查询的FROM子句中引用同一张正在更新的目标表,避免同时读写产生数据冲突。

解决方案1:子查询外层嵌套派生表

将计算平均年龄的子查询再套一层匿名临时表,MySQL会将其识别为独立的派生结果集,即可规避同表引用限制:

UPDATE Employee
SET Employee_Age = Employee_Age + 10
WHERE Employee_Age != (
    SELECT avg_age FROM (
        SELECT AVG(Employee_Age) AS avg_age FROM Employee
    ) AS temp
)
解决方案2:提前用变量存储平均年龄

先把平均年龄计算后存入用户变量,更新时直接引用变量,也可以避开限制,可读性更高:

-- 先计算并存储平均年龄
SELECT AVG(Employee_Age) INTO @avg_age FROM Employee;
-- 执行更新
UPDATE Employee
SET Employee_Age = Employee_Age + 10
WHERE Employee_Age != @avg_age;

内容的提问来源于stack exchange,提问作者Hasibur Rahman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 18:06:08