MySQL: 複数行更新における LIMIT の問題
MySQL では、LIMIT 句を使用して複数の行を更新しようとすると、エラーが発生する可能性があります。次のクエリについて考えてみます。
UPDATE messages SET test_read=1 WHERE userid='xyz' ORDER BY date_added DESC LIMIT 5, 5;
このクエリは、指定された条件に基づいて 5 行を更新し、最初の 5 行 (LIMIT 5, 5) をスキップすることを目的としています。ただし、これによりエラーが発生します。
2 番目の LIMIT 句 (LIMIT 5) を含まないクエリの作業バージョンでは、条件を満たす最初の 5 行が正常に更新されます。このエラーは、MySQL では更新ステートメント内で 2 番目の LIMIT を指定できないために発生します。
推奨される代替手段
この制限を克服するには、次の回避策が推奨されます。
UPDATE messages SET test_read=1 WHERE id IN ( SELECT id FROM ( SELECT id FROM messages ORDER BY date_added DESC LIMIT 5, 5 ) tmp );
このクエリは、最初にサブクエリを使用して目的の行を特定し、次に適切な行を更新することで同じ結果を実現します。 idフィールドに基づいて。この方法により、MySQL での正確な行の選択と更新が可能になります。
以上がMySQL の「UPDATE」ステートメントが 2 部構成の「LIMIT」句をサポートしないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。