ホームページ  >  記事  >  データベース  >  **LIMIT と Offset を指定した MySQL DELETE でエラーが発生するのはなぜですか?**

**LIMIT と Offset を指定した MySQL DELETE でエラーが発生するのはなぜですか?**

Susan Sarandon
Susan Sarandonオリジナル
2024-10-25 11:21:02211ブラウズ

**Why does MySQL DELETE with LIMIT and Offset Cause an Error?**

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 サイトの他の関連記事を参照してください。

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