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

MySQL执行UPDATE更新同列值触发1053错误的解决方案咨询

错误原因

你遇到的是MySQL特有的操作限制:执行UPDATE/DELETE语句时,不允许直接在子查询的FROM子句中引用正在被修改的目标表,避免读写同一份数据产生冲突,你贴的错误码属于手误,该报错对应的正确错误码为1093。
另外你原SQL还存在两处逻辑问题:

  • 冗余的INNER JOIN titles t2逻辑,同主键自连接没有实际作用
  • 子查询内排序误用了外层表的t.pubDate字段,而非子查询表的pubDate,就算没有语法错误也无法正确取到最新发布日期对应的price值

正确实现方案

方案1:子查询套派生表(写法简单兼容全场景)

把取最新price的逻辑再套一层SELECT,让MySQL将其识别为临时派生表,即可绕过同表引用限制:

UPDATE titles
SET price = (
    SELECT price FROM (
        SELECT price 
        FROM titles 
        ORDER BY pubDate DESC 
        LIMIT 1
    ) AS temp_latest_price
)
WHERE titleID = 1001;

方案2:JOIN关联更新(性能更优)

直接通过交叉join关联最新记录完成更新,不需要多层嵌套子查询,执行效率更高:

UPDATE titles t_target
CROSS JOIN (
    SELECT price 
    FROM titles 
    ORDER BY pubDate DESC 
    LIMIT 1
) t_latest
SET t_target.price = t_latest.price
WHERE t_target.titleID = 1001;

注意事项
  • 如果存在多条pubDate相同的最新记录,LIMIT 1会随机返回其中一条的price,如果你有明确的取值优先级,可以在ORDER BY后追加第二个排序规则,比如ORDER BY pubDate DESC, titleID DESC,保证取值可预期
  • 执行更新前建议先执行查询确认最新price值是否符合预期,避免误操作:
SELECT price FROM titles ORDER BY pubDate DESC LIMIT 1;

内容的提问来源于stack exchange,提问作者The Ultraempoleon

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 20:27:01