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)