mysql - 如何解决 MySQL 错误 "You can' t specify target table X for update in FROM clause”?

标签 mysql

<分区>

为什么这个查询不起作用?

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 - You can't specify target table 'cancome' for update in FROM clause

最佳答案

这不起作用的原因是 MySQL 不允许您在子查询中引用您正在更新 (cancome) 的表。

然而,这可以通过在 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

关于mysql - 如何解决 MySQL 错误 "You can' t specify target table X for update in FROM clause”?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37251621/

相关文章:

php - UTF-8贯穿始终

mysql - 来自不同表的子查询最后日期/值

c# - 将 List<int> 添加到 mysql 参数

MySQL如何计算每天添加的不同值?

mysql - mysql 中计数缺失值

mysql - 如何在 MySQL 中获取两列值中的最大值?

php - 加入到creditmemo_flat_table

mysql - 如何定位和显示我的 .Net 页面的特定数据库字段

mysql - 分组依据似乎不适用于联合 SQL 查询

javascript - 将sql查询参数发送给函数