如何在同一张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
相关产品推荐
相关产品推荐

