SQL クエリを使用して、最新の N レコードを除くすべてのレコードを削除します
MySQL では、ID の降順でソートされた最新の N レコードを除く、テーブル内のすべてのレコードを削除できます。これは単一の MySQL クエリを使用して実現できますが、予想ほど簡単ではありません。
次のようなクエリを使用するだけです:
<code class="language-sql">delete from table order by id ASC limit ((select count(*) from table ) - N)</code>
は、サブクエリを使用して LIMIT 句の値を指定できないため、失敗します。これを実現するには、より複雑なクエリが必要です:
<code class="language-sql">DELETE FROM `table` WHERE id NOT IN ( SELECT id FROM ( SELECT id FROM `table` ORDER BY id DESC LIMIT N ) foo );</code>
このクエリでは、中間サブクエリを使用して最新の N レコードの ID を選択します。次に、メイン クエリは NOT IN 演算子でこのサブクエリを使用して、これらのレコードを削除プロセスから除外します。このアプローチにより、メイン クエリの LIMIT 句または FROM 句でサブクエリを直接使用する制限を回避できます。
中間サブクエリが必須であることに注意してください。これがないと、サブクエリで削除されるテーブルの参照に関連するエラーや、NOT IN 演算子で使用されるサブクエリでの LIMIT 句の使用をサポートしていない MySQL の以前のバージョンによって課せられた制限に遭遇することになります。
このクエリを使用すると、特定の列で並べ替えられた最新の N レコードを除くテーブル内のすべてのレコードを効果的に削除でき、最新のデータが確実に保持されます。
以上が単一のクエリを使用して MySQL の最新の N レコードを除くすべてのレコードを削除するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。