0

我在windows上的mysql客户端shell中运行了这个。我不明白问题是什么。我知道delete from PageInfo where id是正确的。我知道子查询是正确的。我认为 in 是正确的,但我不经常使用它。整个事情看起来是正确的,但我在某个地方遇到了问题。我不明白错误信息。

如何删除子查询返回的所有 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
4

3 回答 3

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)
于 2012-10-21T04:06:08.180 回答
2

来自mysql网站。如前所述,不允许从同一个表中选择和修改

出现这种错误的情况如下,在子查询中试图修改一个表并从同一个表中选择

  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"
:
于 2012-10-21T03:52:21.527 回答
2

在 MySQL 中,您不能修改作为子查询一部分的同一个表。

更多信息在http://dev.mysql.com/doc/refman/5.6/en/update.html

此处描述了您的问题的解决方法。

于 2012-10-21T03:56:26.980 回答