MySQL 子查詢限制:刪除最新 15 則貼文
在資料庫最佳化領域,經常需要刪除冗餘或過時的資料。這個問題探討如何使用 MySQL 子查詢刪除除最新 15 個條款之外的所有貼文。
原始查詢:
DELETE FROM posts WHERE id NOT IN (SELECT id FROM posts ORDER BY timestamp DESC LIMIT 0, 15)
但是,由於 MySQL 缺乏對早期版本中的「LIMIT & IN/ALL/ANY/SOME」子查詢。為了解決這個問題,可以使用修改後的查詢:
DELETE FROM posts WHERE id NOT IN ( SELECT * FROM ( SELECT id FROM posts ORDER BY timestamp DESC LIMIT 0, 15 ) AS t);
在此修改後的查詢中,使用別名「t」引入了一個附加子查詢作為派生表。此衍生表包含最新 15 個貼文的 ID,根據時間戳記按降序排序。然後,主查詢在刪除貼文時利用此衍生表來排除那些特定的 ID。
透過使用此解決方法,可以達到刪除所有貼文的預期結果,除了 MySQL 版本中最近的 15 個貼文之外。不支援“LIMIT & IN/ALL/ANY/SOME”子查詢。這種修改後的方法有效地刪除了過時的帖子,同時保留了最新的帖子以供進一步參考。
以上是如何在沒有「LIMIT & IN」子查詢支援的 MySQL 中刪除除最新 15 條之外的所有貼文?的詳細內容。更多資訊請關注PHP中文網其他相關文章!