带有限制的Mysql删除语句

SBS*_*STP 24 mysql sql-order-by limit sql-delete

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

DELETE FROM `chat_messages` ORDER BY `timestamp` DESC LIMIT 20, 50;
Run Code Online (Sandbox Code Playgroud)

我在50时得到这个错误:

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

不知道出了什么问题.

zer*_*kms 42

您不能在DELETE's LIMIT子句中指定偏移量.

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

DELETE FROM `chat_messages` WHERE id IN (select id from (select id
                                           FROM `chat_messages`
                                       ORDER BY `timestamp` DESC
                                          LIMIT 20, 50) x)
Run Code Online (Sandbox Code Playgroud)

假设您有主键id

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