web-dev-qa-db-ja.com

制限付きのMySQL削除ステートメント

テーブルから行を削除しようとしていますが、エラーが発生します。

DELETE FROM `chat_messages` ORDER BY `timestamp` DESC LIMIT 20, 50;

私は50でこのエラーを受け取ります:

SQL構文にエラーがあります。 MySQLサーバーのバージョンに対応するマニュアルで、1行目の「50」付近で使用する正しい構文を確認してください

何が悪いのかわからない。

26
SBSTP

DELETELIMIT句にはオフセットを指定できません。

したがって、これを行う唯一の方法は、クエリを次のように書き換えることです。

DELETE FROM `chat_messages` WHERE id IN (select id from (select id
                                           FROM `chat_messages`
                                       ORDER BY `timestamp` DESC
                                          LIMIT 20, 50) x)

主キーid列があるとします

[〜#〜] upd [〜#〜]:現在変更されているテーブルから選択できないため、mysqlをだますために二重ネストを実装する必要があります(Martin Smithに感謝)

42
zerkms