[解決済み] SQLクエリです。テーブルから最新のN件を除くすべてのレコードを削除しますか?
2023-01-12 13:11:07
質問
テーブルからすべてのレコードを削除するために、単一の mysql クエリ (変数なし) を構築することは可能でしょうか。
このようなもの、それが動作しないだけ:)。
delete from table order by id ASC limit ((select count(*) from table ) - 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つのエラーに遭遇することになります。
- SQLエラー(1093)。FROM句で更新対象のテーブル'table'を指定することはできません。 - MySQL は、直接サブクエリ内から削除するテーブルを参照することを許可していません。
- SQL エラー (1235)。このバージョンの MySQL は 'LIMIT & IN/ALL/ANY/SOME サブクエリ' をまだサポートしていません。 - NOT IN 演算子の直接サブクエリ内で LIMIT 句を使用することはできません。
幸いなことに、中間サブクエリを使用することで、これらの制限を両方とも回避することができます。
Nicole は、このクエリが特定のユースケース (このようなケース) に対して大幅に最適化されることを指摘しています。以下を読むことをお勧めします。 その答え を読んで、自分に当てはまるかどうかを確認することをお勧めします。
関連
-
mysqlのデータ圧縮性能比較 詳細
-
mysqlインデックスが長すぎる特殊なキーが長すぎる解決策
-
[解決済み】MySQL - オペランドは1つのカラムを含む必要があります。
-
[解決済み] [GROUP BY句に含まれるか、集約関数で使用される必要があります。
-
[解決済み】文字列からuniqueidentifierに変換する際に変換に失敗する - 2つのGUIDの場合
-
[解決済み] SQL Server の DateTime データ型から日付だけを返す方法
-
[解決済み] INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL JOINの違いは何ですか?[重複しています]。
-
[解決済み] SQL Serverで、指定したテーブルを参照しているすべての外部キーを一覧表示するにはどうすればよいですか?
-
[解決済み】MYSQLのLIMITオフセットが高いと、なぜクエリが遅くなるのですか?
-
[解決済み] MySQLから最後のN行を選択する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
MySQLのデータバックアップにmysqldumpを使用する方法
-
SQL基本クエリステートメント
-
SpringBootのMySQLへの接続は、バックエンドのインターフェイスの操作方法を書き込むためのデータを取得するために
-
MySQLインストールチュートリアル(Linux版
-
[解決済み】文字列からuniqueidentifierに変換する際に変換に失敗する - 2つのGUIDの場合
-
MySQLの一般的な分割ライブラリおよび分割テーブルスキームの概要
-
Unknown character set.を解決する。MySQLデータベースインポート時の'utf8mb4'エラーの解消
-
[解決済み] SQL ServerでLIMITを実装するには?重複
-
[解決済み] MySQLデータベースの名前を素早く変更する(スキーマ名を変更する)方法は?
-
[解決済み] SQLデータベースのテーブルでn番目の行を選択する方法は?