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

Что я делаю не так?

12 голосов | спросил Abby E 12 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowWed, 12 Sep 2012 10:21:20 +0400 2012, 10:21:20

5 ответов


0

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

DELETE FROM table
WHERE ID IN
        (
        SELECT ID
        FROM
            (
                SELECT ID
                FROM table
                WHERE Type = 'TEST'
                ORDER BY ID
                LIMIT 30,60
            ) a
        )
ответил John Woo 12 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowWed, 12 Sep 2012 10:25:13 +0400 2012, 10:25:13
0

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

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

DELETE FROM table WHERE id IN (SELECT id FROM table WHERE type = 'test' ORDER BY id DESC LIMIT 30, 60)
ответил alexn 12 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowWed, 12 Sep 2012 10:23:33 +0400 2012, 10:23:33
0

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

DELETE FROM table
WHERE type = 'test'
AND ID IN (SELECT id from table where type = 'test' order by id desc limit 30 )
ответил 12 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowWed, 12 Sep 2012 10:26:01 +0400 2012, 10:26:01
0

Попробуйте вот так

DELETE FROM table WHERE id in(SELECT id FROM table WHERE type = "test" order by id desc limit 30, 60)
ответил Gautam3164 12 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowWed, 12 Sep 2012 10:26:47 +0400 2012, 10:26:47
0

Мне не удалось использовать предложение 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)
ответил Grebe.123 4 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowMon, 04 Sep 2017 12:50:05 +0300 2017, 12:50:05

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132