使用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中文網其他相關文章!