【问题标题】:Mysql delete statement with limitmysql删除语句有限制
【发布时间】:2011-10-31 19:25:03
【问题描述】:

我正在尝试从表中删除行,但出现错误。

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

我在 50 时收到此错误:

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

不知道出了什么问题。

【问题讨论】:

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


【解决方案1】:

您不能在DELETELIMIT 子句中指定偏移量。

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

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)

【讨论】:

  • MySQL 不允许这样做(错误 1093),除非您添加额外的嵌套级别。见stackoverflow.com/q/3271396/73226
  • +1 击败了我 - DELETE 接受 rowcount 仅适用于 LIMIT
  • @Martin Smith:你是什么意思?
  • 我编辑了我的评论以添加更多详细信息。如果子查询直接在IN 中,则会出现错误“您无法在 FROM 子句中指定目标表 'chat_messages' 进行更新”。您可以通过将子查询设为派生表来解决此问题。
猜你喜欢
  • 1970-01-01
  • 2010-12-31
  • 2022-01-17
  • 2011-09-01
  • 2013-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多