如何解决 MySQL 错误“您不能在 FROM 子句中指定目标表 X 进行更新”? [复制]
Posted
技术标签:
【中文标题】如何解决 MySQL 错误“您不能在 FROM 子句中指定目标表 X 进行更新”? [复制]【英文标题】:How to resolve MySQL error "You can't specify target table X for update in FROM clause"? [duplicate] 【发布时间】:2016-09-12 02:34:35 【问题描述】:为什么这个查询不起作用?
DELETE FROM cancome WHERE user_id IN (
SELECT user_id FROM cancome
GROUP BY user_id
HAVING COUNT(user_id)>3
)
limit 3
我收到此错误消息:
[Err] 1093 - 您不能在 FROM 子句中指定目标表 'cancome' 进行更新
【问题讨论】:
【参考方案1】:这不起作用的原因是 mysql 不允许您在子查询中引用您正在更新(可以)的表。
然而,这可以通过在 FROM 中使用查询而不是表本身来克服,这具有复制请求的表值而不是引用您正在更新的值的效果。
即使反直觉,这也是有效的:
DELETE FROM cancome WHERE user_id IN
( SELECT user_id FROM (SELECT * FROM cancome) AS cancomesub
GROUP BY user_id HAVING COUNT(user_id)>3 )
limit 3
【讨论】:
当我尝试这个你被回答的代码时,我收到这条消息“[Err] 1248 - 每个派生表都必须有自己的别名” 感谢您的工作 你是对的,这是违反直觉的,你也是对的,它就像一个魅力。 :-) 这能保证原子运行吗?以上是关于如何解决 MySQL 错误“您不能在 FROM 子句中指定目标表 X 进行更新”? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
如何在 UPDATE 期间解决错误代码 1175 mySQL?
PHP & mySQL:2038 年错误:它是啥?如何解决?