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

MySQL の最新の N レコードを除くすべてを削除するにはどうすればよいですか?

Linda Hamilton
リリース: 2025-01-08 16:31:48
オリジナル
892 人が閲覧しました

How Can I Delete All But the N Latest Records in MySQL?

SQL で最新の N レコードを除くすべてのレコードを削除する方法

これはよくある問題です。テーブルはレコードでいっぱいですが、最新の N レコードだけを保持し、残りは削除したいと考えています。質問したクエリは意図を示していますが、MySQL の制限によりその目的を達成できません。

心配しないでください。解決策は存在します。次のクエリにより、目的の結果が得られます:

<code class="language-sql">DELETE FROM `table`
WHERE id NOT IN (
  SELECT id
  FROM (
    SELECT id
    FROM `table`
    ORDER BY id DESC
    LIMIT N -- 保留最新的N条记录
  ) foo
);</code>
ログイン後にコピー

クエリ分解:

  1. DELETE ステートメントのターゲットは、レコードの削除に使用される「table」テーブルです。
  2. WHERE 句は、サブクエリに ID が存在しないかどうかをチェックして、削除するレコードを除外します。
  3. サブクエリは、レコードを降順 (id DESC) で並べ替え、結果を制限することによって、最新の N 個のレコードを選択します。
  4. 中間サブクエリ (foo) は、MySQL の制限を緩和するために必要です。

バイパスされた制限:

  • 中間サブクエリは、サブクエリを DELETE 操作から分離することで、「ターゲット テーブルを更新する FROM 句のエラー」を防ぎます。
  • サブクエリのサブクエリを使用することで、「LIMIT & IN/ALL/ANY/SOME subquery」エラーも回避します。

最適化手順:

使用例によっては、次の最適化されたクエリの方が適している場合があります:

<code class="language-sql">DELETE FROM `table`
ORDER BY id DESC
LIMIT ROWS COUNT() - N -- 只保留最新的N条记录</code>
ログイン後にコピー

要件を満たしている場合は、パフォーマンスを大幅に向上させることができるため、この最適化を検討してください。

以上がMySQL の最新の N レコードを除くすべてを削除するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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