sql >> データベース >  >> RDS >> Mysql

SQLクエリ:最新のNを除くすべてのレコードをテーブルから削除しますか?

    その方法でレコードを削除することはできません。主な問題は、サブクエリを使用してLIMIT句の値を指定できないことです。

    これは機能します(MySQL 5.0.67でテスト済み):

    DELETE FROM `table`
    WHERE id NOT IN (
      SELECT id
      FROM (
        SELECT id
        FROM `table`
        ORDER BY id DESC
        LIMIT 42 -- keep this many records
      ) foo
    );
    

    中間サブクエリは 必要。これがないと、2つのエラーが発生します。

    1. SQLエラー(1093):FROM句で更新するターゲットテーブル'table'を指定できません --MySQLでは、直接サブクエリ内から削除するテーブルを参照することはできません。
    2. SQLエラー(1235):このバージョンのMySQLは、「LIMIT&IN / ALL / ANY/SOMEサブクエリ」をまだサポートしていません -NOTIN演算子の直接サブクエリ内でLIMIT句を使用することはできません。

    幸い、中間サブクエリを使用すると、これらの制限の両方を回避できます。

    Nicoleは、このクエリは特定のユースケース(このようなもの)に対して大幅に最適化できると指摘しています。 その回答 を読むことをお勧めします 自分に合っているかどうかも確認してください。



    1. 2ndQuadrant Deutschland –特別トレーニングオープニングバーゲン

    2. SQLcl(Oracle)でクエリ結果をCSVファイルにエクスポートする方法

    3. MacにSQLServerをインストールする方法

    4. ストップワードリストが空であってもストップワードが含まれている場合、全文検索は機能しません