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

如何在同一张MySQL表中复制另一行的单元格值?

解决MySQL同表更新时“表被指定两次”的错误

这个问题我碰到过好几次了,MySQL的这个限制确实有点烦——它不允许你在UPDATE语句里同时把同一个表既当作更新的目标,又直接在子查询里当作数据来源。不过别担心,有好几种简单的解决办法:

方法1:用子查询包装成临时表

把原来的子查询套一层,给它起个别名,让MySQL将其视为独立的临时表,这样就能避开同表引用的限制:

UPDATE mytable 
SET myvalue = (SELECT temp.myvalue FROM (SELECT myvalue FROM mytable WHERE id=2) AS temp) 
WHERE id=11;

方法2:使用JOIN进行更新

这种方式更直观,而且在数据量较大时通常效率更高。通过给表起不同的别名,明确区分更新目标和数据来源:

UPDATE mytable t1
JOIN mytable t2 ON t2.id = 2
SET t1.myvalue = t2.myvalue
WHERE t1.id = 11;

方法3:MySQL 8.0+ 可用CTE(公共表达式)

如果你的MySQL版本是8.0及以上,用CTE来封装数据源会让代码结构更清晰:

WITH temp AS (SELECT myvalue FROM mytable WHERE id=2)
UPDATE mytable
SET myvalue = (SELECT myvalue FROM temp)
WHERE id=11;

这几种方法都能完美解决你遇到的Table 'mytable' is specified twice, both as a target for 'UPDATE' and as a separate source for data错误,你可以根据自己的习惯和MySQL版本选择合适的方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:24:01