NOT IN サブクエリの LIMIT: MySQL の制限
MySQL を使用する場合、LIMIT 句内でサブクエリを使用するときに制限が発生する場合があります。特定の範囲に含まれないレコードを削除しようとすると、一般的な問題が 1 つ発生します。
最新の 15 件に含まれない投稿を削除するとします。単純なアプローチには、次のクエリが含まれる可能性があります。
DELETE FROM posts WHERE id NOT IN (SELECT id FROM posts ORDER BY timestamp DESC LIMIT 0, 15);
ただし、このクエリは失敗する可能性が高く、「MySQL はまだ LIMIT & IN/ALL/ANY/SOME サブクエリをサポートしていません。」などのエラー メッセージが返されます。
制限事項
この制限を克服するには、サブクエリを別のサブクエリ内に囲むことで回避策を採用できます。
DELETE FROM posts WHERE id NOT IN (SELECT * FROM ( SELECT id FROM posts ORDER BY timestamp DESC LIMIT 0, 15 ) AS t);
この変更されたクエリでは、最新の 15 件の投稿を選択するサブクエリが使用されます。にはエイリアス「t」が割り当てられ、外側のサブクエリはそのエイリアスを使用して除外された ID を取得します。結果は、目的の削除を実現する有効なクエリです。
以上がNOT IN サブクエリで LIMIT を使用すると MySQL が失敗するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。