ホームページ > データベース > mysql チュートリアル > 単一のクエリを使用して MySQL の最新の N レコードを除くすべてのレコードを削除するにはどうすればよいですか?

単一のクエリを使用して MySQL の最新の N レコードを除くすべてのレコードを削除するにはどうすればよいですか?

Barbara Streisand
リリース: 2025-01-08 16:26:41
オリジナル
919 人が閲覧しました

How to Delete All but the Latest N Records in MySQL Using a Single Query?

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート