首頁 >資料庫 >mysql教程 >如何使用單一查詢刪除 MySQL 中除最新 N 筆記錄之外的所有記錄?

如何使用單一查詢刪除 MySQL 中除最新 N 筆記錄之外的所有記錄?

Barbara Streisand
Barbara Streisand原創
2025-01-08 16:26:41965瀏覽

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子句中使用子查詢的限制。

值得注意的是,中間子查詢是必不可少的。如果沒有它,我們會遇到與在子查詢中引用正在刪除的表以及早期版本的MySQL強加的限制相關的錯誤,這些限制不支援在NOT IN運算符中使用的子查詢中使用LIMIT子句。

透過使用此查詢,可以有效地刪除表中除按特定列排序的最新N筆記錄外的所有記錄,確保保留最新資料。

以上是如何使用單一查詢刪除 MySQL 中除最新 N 筆記錄之外的所有記錄?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn