18

テーブルがあり、最新の 30 行のみを ID 順に表示しています。

以下のクエリを使用して、最新の 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

私は何を間違っていますか?

4

5 に答える 5

27

これを試して、

DELETE FROM table
WHERE ID IN
        (
        SELECT ID
        FROM
            (
                SELECT ID
                FROM table
                WHERE Type = 'TEST'
                ORDER BY ID
                LIMIT 30,60
            ) a
        )
于 2012-09-12T06:25:13.327 に答える
8

2 番目の編集: 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)
于 2012-09-12T06:23:33.550 に答える
0

これはこの方法では不可能です。次のように、ネストされた select ステートメントで試すことができます。

DELETE FROM table
WHERE type = 'test'
AND ID IN (SELECT id from table where type = 'test' order by id desc limit 30 )
于 2012-09-12T06:26:01.007 に答える
0

このようにしてみてください

DELETE FROM table WHERE id in(SELECT id FROM table WHERE type = "test" order by id desc limit 30, 60)
于 2012-09-12T06:26:47.123 に答える
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)
于 2017-09-04T09:50:05.423 に答える