如何解决 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 进行更新”? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何快速解决MySQL 1032 主从错误

MySQL:如何解决此查询的临时表错误?

如何在 UPDATE 期间解决错误代码 1175 mySQL?

PHP & mySQL:2038 年错误:它是啥?如何解决?

如何解决 MySql 中的 PARTITION BY 语法错误

如何解决一般错误:2006 MySQL server has gone away