带限制的Mysql delete语句

带限制的Mysql delete语句,mysql,sql-order-by,limit,sql-delete,Mysql,Sql Order By,Limit,Sql Delete,我试图从表中删除行,但出现错误 DELETE FROM `chat_messages` ORDER BY `timestamp` DESC LIMIT 20, 50; 我在50时得到这个错误: 您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以了解第1行“50”附近使用的正确语法 不知道出了什么问题。您不能在DELETE的LIMIT子句中指定偏移量 因此,唯一的方法是将查询重写为以下内容: DELETE FROM `chat_messages` WHERE id IN (selec

我试图从表中删除行,但出现错误

DELETE FROM `chat_messages` ORDER BY `timestamp` DESC LIMIT 20, 50;
我在50时得到这个错误:

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


不知道出了什么问题。

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

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

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


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

看看同样发布在StackOverflow上的这个问题:mysql不允许这样做(错误1093),除非您添加额外级别的嵌套。参见+1击败我的答案-
DELETE
accepts
rowcount
仅用于
LIMIT
@Martin Smith:什么意思?我编辑了我的评论以添加更多细节。如果子查询直接位于中的中,则会出现错误“您无法为FROM子句中的更新指定目标表“chat\u messages”。您可以通过使子查询成为派生表来解决这个问题。