如何解决MySQL错误“您无法在FROM子句中指定目标表X进行更新”?

问题描述:

这个查询为什么不起作用?如何解决MySQL错误“您无法在FROM子句中指定目标表X进行更新”?

DELETE FROM cancome WHERE user_id IN (
    SELECT user_id FROM cancome 
GROUP BY user_id 
HAVING COUNT(user_id)>3 
) 
limit 3 

我收到此错误信息:

[错误] 1093 - 你不能指定FROM子句

之所以这并未用于更新目标表 'cancome'不工作的是,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 
+0

当我尝试这个代码,你answerd我得到这个消息 “[错误] 1248 - 每一个派生表必须有它自己的别名 “ –

+0

感谢你的工作 –

+1

你是对的,那是违反直觉的,你也是对的,它像魅力一样工作。 :-) – fool4jesus