Удалить последние n строк в MySQL - PullRequest
0 голосов
/ 10 мая 2018

Я пытаюсь удалить последние N строк в данной таблице. Я попытался запустить следующий скрипт

DELETE FROM SCHEMA ORDER BY PID DESC LIMIT 26000;

но я получаю эту ошибку

Сообщение: [SQL0199] Ключевое слово ORDER не ожидается. Действительные токены: ИСПОЛЬЗУЙТЕ Пропустить, ЖДИТЕ ГДЕ. Причина , , , , : Ключевое слово ORDER здесь не ожидалось.

Я также пытался запустить этот скрипт

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

но все равно я получаю ту же ошибку, за исключением того, что не ожидалось ключевое слово "LIMIT".

Есть ли ошибки в моем синтаксисе? Любые предложения о том, как я могу это сделать?

Ответы [ 2 ]

0 голосов
/ 10 мая 2018

Ваша ошибка - ошибка 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, которая не поддерживает ORDER BY в DELETE.

0 голосов
/ 10 мая 2018

Как удалить последние n строк в MySQL:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...