使用帶有LIMIT 的MySQL DELETE 語句時遇到錯誤
問題:
嘗試時使用帶有LIMIT 子句的MySQL DELETE 語句從表中刪除資料列時,在LIMIT 子句中的偏移值處遇到錯誤。以下查詢舉例說明了這個問題:
DELETE FROM `chat_messages` ORDER BY `timestamp` DESC LIMIT 20, 50;
在偏移值(50) 收到的錯誤訊息為:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' 50' at line 1
解決方案:
出現該錯誤的原因是MySQL不允許在DELETE語句的LIMIT子句中指定偏移量。因此,我們必須採用替代方法來實現所需的結果。
要根據範圍從表中刪除特定行,我們可以使用嵌套在主 DELETE 查詢中的子查詢。以下修改後的查詢示範了此技術:
<code class="sql">DELETE FROM `chat_messages` WHERE `id` IN ( SELECT `id` FROM ( SELECT `id` FROM `chat_messages` ORDER BY `timestamp` DESC LIMIT 20, 50 ) AS `x` )</code>
在此查詢中,IN 子句中的子查詢會根據指定範圍檢索要刪除的行的 ID。假設表有一個名為 id 的主鍵列,我們可以用它來唯一地標識每一行。
注意: 實作雙重巢狀很重要,以避免 MySQL 無法選擇的問題目前已修改的表。
以上是**為什麼 MySQL DELETE with LIMIT 和 Offset 會導致錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!