从子查询错误中的id删除

时间:2012-10-21 03:44:11

标签: mysql syntax-error

我在Windows上运行mysql客户端shell。我不明白问题是什么。我知道delete from PageInfo where id是正确的。我知道子查询是正确的。我认为是正确的,但我不经常使用它。这一切看起来都很正确但我在某处遇到了问题。我不明白错误信息。

如何删除子查询返回的所有ID?

mysql> delete from PageInfo where id in ( select max(id) from PageInfo where pid
>=2758000 AND pid<2758100 group by pid having count(pid)>1 );
ERROR 1093 (HY000): You can't specify target table 'PageInfo' for update in FROM
 clause

3 个答案:

答案 0 :(得分:4)

你可以这样做

delete from PageInfo where id = ( SELECT maxid FROM ( select max(id) as maxid from PageInfo where pid >=2758000 AND pid<2758100 group by pid having count(pid)>1) as tmp)

答案 1 :(得分:2)

来自mysql website

。如上所述,不允许从同一表中选择和修改

在以下情况下会发生此错误,该错误会尝试修改表并从子查询中的同一个表中进行选择

  Incorrectly used table in subquery:

 Error 1093 (ER_UPDATE_TABLE_USED)
  SQLSTATE = HY000
  Message = "You can't specify target table 'x'
 for update in FROM clause"
:

答案 2 :(得分:2)

在MySQL中,您无法修改属于子查询的同一个表。

http://dev.mysql.com/doc/refman/5.6/en/update.html

的更多信息

Workaround for your problem is described here.