在MySQL 中刪除具有範圍的行
當嘗試使用MySQL 中的LIMIT 子句從表中刪除特定範圍的行時,可能會發生錯誤。為了說明這一點,以下查詢的目標是刪除50 行的範圍,從第20 行開始按時間戳降序排列:
DELETE FROM `chat_messages` ORDER BY `timestamp` DESC LIMIT 20, 50;
但是,在執行此查詢時,會遇到錯誤訊息,因為無效的語法,特別是在OFFSET 值(50)。
DELETE 語句中 LIMIT 子句的限制
錯誤的根本原因在於無法使用DELETE 語句的 LIMIT 子句中的 OFFSET。這與 SELECT 語句有顯著區別,後者允許 LIMIT 和 OFFSET 指定要擷取的起始點和行數。
範圍刪除的解決方法
至為了規避這個限制,需要一個解決方法。透過利用嵌套在 DELETE 語句中的子查詢,可以準確地定位和刪除行範圍。此方法涉及以下步驟:
以下是使用此解決方法修改查詢的範例:
DELETE FROM `chat_messages` WHERE `id` IN ( SELECT `id` FROM ( SELECT `id` FROM `chat_messages` ORDER BY `timestamp` DESC LIMIT 20, 50 ) AS `x` )
在此查詢中,主假定鍵列id,但可以在您的特定場景中將其修改為適當的列名。
以上是如何在 DELETE 語句中不使用 OFFSET 的情況下刪除 MySQL 中的一系列行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!