Mysql удалить заказ по

У меня есть таблица, и я показываю только последние 30 строк по порядку по идентификатору.

Я пытаюсь удалить любые строки после 30 новых строк, используя этот запрос ниже.

DELETE FROM table WHERE type = 'test' ORDER BY id DESC LIMIT 30, 60

Я продолжаю получать эту ошибку ниже

#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

Что я делаю неправильно?

Спасибо!

Ответ 1

Попробуйте это,

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

Ответ 2

Второе редактирование: в то время как MySQL поддерживает LIMIT в операторах удаления, он не разрешает Смещение. Это означает, что вы не можете пропустить первые 30 строк.

Сделайте подзапрос на id (или любой другой первичный ключ):

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

Ответ 3

Это невозможно. Вы можете попробовать его с помощью вложенного оператора select, примерно так:

DELETE FROM table
WHERE type = 'test'
AND ID IN (SELECT id from table where type = 'test' order by id desc limit 30 )

Ответ 4

Попробуйте это

DELETE FROM table WHERE id in(SELECT id FROM table WHERE type = "test" order by id desc limit 30, 60)

Ответ 5

Мне не удалось использовать предложение limit в подзапросе, поэтому решение, которое я использую, несколько беспорядочно: -

select group_concat(id) into @idList from
( 
select id from  table order by id desc limit 0,30
) as saveIds;
delete from table where not find_in_set(id,@idList)

В качестве альтернативы

select group_concat(id) into @idList from
( 
select id from  table order by id desc limit 30
) as saveIds;
delete from table where find_in_set(id,@idList)