带有限制的Mysql删除语句

时间:2011-08-22 00:25:03

标签: mysql sql-order-by limit sql-delete

我正在尝试从表中删除行,但是我收到错误。

DELETE FROM `chat_messages` ORDER BY `timestamp` DESC LIMIT 20, 50;

我在50时收到此错误:

  

您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以便在第1行的“50”附近使用正确的语法

不知道出了什么问题。

1 个答案:

答案 0 :(得分:42)

您无法在DELETE的{​​{1}}子句中指定偏移量。

因此,唯一的方法是将查询重写为:

LIMIT

假设您拥有主键DELETE FROM `chat_messages` WHERE id IN (select id from (select id FROM `chat_messages` ORDER BY `timestamp` DESC LIMIT 20, 50) x)

UPD :你需要实现双重嵌套来欺骗mysql,因为它不允许从当前修改的表中进行选择(感谢Martin Smith)