【问题标题】:Delete last n rows in mysql删除mysql中的最后n行
【发布时间】:2018-05-10 10:19:19
【问题描述】:

我正在尝试删除给定表中的最后 N 行。我尝试运行以下脚本

DELETE FROM SCHEMA ORDER BY PID DESC LIMIT 26000;

但我收到此错误

消息:[SQL0199] 不期望关键字 ORDER。有效令牌:使用 SKIP WAIT WITH WHERE。原因 。 . . . . : 这里没有预期关键字 ORDER。

我也试过运行这个脚本

DELETE FROM SCHEMA WHERE PID IN (SELECT PID FROM (SELECT  PID FROM SCHEMA ORDER BY PID DESC limit 26000) a );

但是,我得到了同样的错误,除了关键字不期望是“LIMIT”。

我的语法有错误吗?关于如何做到这一点的任何建议?

【问题讨论】:

  • SQL0199 表明您使用的是 DB2,而不是 MySQL。

标签: sql database db2


【解决方案1】:

您的错误是 DB2 错误,而不是 MySQL 错误。我建议:

DELETE FROM SCHEMA
    WHERE PID IN (SELECT PID
                  FROM SCHEMA
                  ORDER BY PID DESC 
                  FETCH FIRST 26000 ROWS ONLY
                 ) ;

我认为这也可以:

DELETE FROM SCHEMA
    ORDER BY PID
    FETCH FIRST 26000 ROWS ONLY;

也许您使用的 DB2 版本不支持 DELETE 中的 ORDER BY。

【讨论】:

    【解决方案2】:

    如何删除 MySQL 中的最后 n 行:

    START TRANSACTION
    
      SELECT
        @pid = MIN(pid)
      FROM
      (
        SELECT PID FROM schema ORDER BY PID DESC LIMIT 26000
      )
        last26000
    
      DELETE FROM schema WHERE pid >= @pid
    
    COMMIT
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-14
      • 1970-01-01
      • 2017-05-19
      • 2017-07-16
      • 1970-01-01
      相关资源
      最近更新 更多