ホームページ >データベース >mysql チュートリアル >**LIMIT と Offset を指定した MySQL DELETE でエラーが発生するのはなぜですか?**
MySQL DELETE ステートメントを LIMIT で使用するとエラーが発生しました
問題:
を試行したときLIMIT 句を指定した MySQL DELETE ステートメントを使用してテーブルから行を削除すると、LIMIT 句のオフセット値でエラーが発生します。次のクエリは問題の例です:
DELETE FROM `chat_messages` ORDER BY `timestamp` DESC LIMIT 20, 50;
オフセット値 (50) で受信したエラー メッセージは次のとおりです:
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 ' 50' at line 1
解決策:
このエラーは、MySQL では DELETE ステートメントの LIMIT 句でオフセットを指定できないために発生します。したがって、望ましい結果を達成するには、別のアプローチに頼る必要があります。
範囲に基づいてテーブルから特定の行を削除するには、メインの DELETE クエリ内にネストされたサブクエリを使用できます。次の変更されたクエリは、この手法を示しています。
<code class="sql">DELETE FROM `chat_messages` WHERE `id` IN ( SELECT `id` FROM ( SELECT `id` FROM `chat_messages` ORDER BY `timestamp` DESC LIMIT 20, 50 ) AS `x` )</code>
このクエリでは、IN 句内のサブクエリが、指定された範囲に基づいて削除される行の ID を取得します。テーブルに id という名前の主キー列があると仮定すると、それを使用して各行を一意に識別できます。
注: MySQL が選択できないという問題を回避するには、二重ネストを実装することが重要です。現在変更されているテーブル
以上が**LIMIT と Offset を指定した MySQL DELETE でエラーが発生するのはなぜですか?**の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。