ホームページ  >  記事  >  データベース  >  制限付きのMySQLで特定の数の行を降順で削除するにはどうすればよいですか?

制限付きのMySQLで特定の数の行を降順で削除するにはどうすればよいですか?

DDD
DDDオリジナル
2024-10-28 11:54:41502ブラウズ

How to Delete a Specific Number of Rows in Descending Order in MySQL with Restrictions?

MySQL で制限付きの行を削除する

この質問では、MySQL で LIMIT 句を指定した DELETE ステートメントの使用法について説明します。ユーザーは、タイムスタンプ列の降順で指定された数の行を削除しようとします。ただし、クエリは構文エラーで失敗します。

このエラーは、MySQL が DELETE ステートメントの LIMIT 句でオフセットを許可していないために発生します。その結果、クエリは意図したとおりに実行できません。

この問題を解決するには、別のアプローチを使用してクエリを書き直すことができます。書き換えられたクエリでは、ネストされたサブクエリを使用して、目的の範囲に基づいて削除する行を選択します。

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

この変更されたクエリでは、ネストされたサブクエリにより、削除される行の ID 値が選択されます。 LIMIT 句は、結果セットを制限するために最も内側のサブクエリに適用されます。

MySQL では現在変更されているテーブルからの選択を禁止しているため、クエリでは二重のネストを使用してこの制限を回避します。外側のサブクエリは一時テーブルとして機能し、最も内側のサブクエリが別の結果セットから ID 値を選択できるようにします。

この手法を実装することにより、クエリは MySQL の構文要件を遵守しながら、指定された範囲内の行を正常に削除できます。 .

以上が制限付きのMySQLで特定の数の行を降順で削除するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。