Mysql删除顺序依次

Abb*_*y E 14 mysql sql

我有一个表,我只按ID顺序显示最新的30行.

我正在尝试使用下面的查询删除30个最新行之后的任何行.

DELETE FROM table WHERE type = 'test' ORDER BY id DESC LIMIT 30, 60
Run Code Online (Sandbox Code Playgroud)

我一直在下面得到这个错误

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' 60' at line 1
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

Joh*_*Woo 18

试试这个,

DELETE FROM table
WHERE ID IN
        (
        SELECT ID
        FROM
            (
                SELECT ID
                FROM table
                WHERE Type = 'TEST'
                ORDER BY ID
                LIMIT 30,60
            ) a
        )
Run Code Online (Sandbox Code Playgroud)

  • 需要双重嵌套才能隐式创建临时表作为解决方法。请参阅[此答案的解释](http://stackoverflow.com/questions/45494/mysql-error-1093-cant-specify-target-table-for-update-in-from-clause/45498#45498)。 (3认同)
  • 请注意,“a”用作子查询的别名:http://stackoverflow.com/a/14767216/1538531 谢谢。这对我有很大帮助! (2认同)
  • 为什么两个嵌套选择?似乎你只需要一个作为下面的答案...... (2认同)

ale*_*exn 8

第二次编辑:虽然MySQL在delete语句中支持LIMIT,但它不允许使用OFFSET.这意味着您不能跳过前30行.

在id(或任何其他主键)上进行子选择:

DELETE FROM table WHERE id IN (SELECT id FROM table WHERE type = 'test' ORDER BY id DESC LIMIT 30, 60)
Run Code Online (Sandbox Code Playgroud)

  • 我收到 #1235 - 此版本的 MySQL 尚不支持“LIMIT & IN/ALL/ANY/SOME 子查询” (2认同)
  • @alexn讨厌挑剔,但不会删除前三十行,这正是OP想要保留的吗?他希望删除查询将删除的行之后的三十行 (2认同)
  • @alexn不,它根本不支持偏移量。唯一的方法是使用John Woo给出的查询(带有double subselect) (2认同)