3 回答

TA貢獻(xiàn)1836條經(jīng)驗(yàn) 獲得超3個(gè)贊
您不能以這種方式刪除記錄,主要問題是您不能使用子查詢來指定LIMIT子句的值。
這有效(在MySQL 5.0.67中測試):
DELETE FROM `table`
WHERE id NOT IN (
SELECT id
FROM (
SELECT id
FROM `table`
ORDER BY id DESC
LIMIT 42 -- keep this many records
) foo
);
中間子查詢是必需的。沒有它,我們將遇到兩個(gè)錯(cuò)誤:
SQL錯(cuò)誤(1093):您無法在FROM子句中指定目標(biāo)表“表”進(jìn)行更新 -MySQL不允許您引用您要在直接子查詢中刪除的表。
SQL錯(cuò)誤(1235):此版本的MySQL尚不支持'LIMIT&IN / ALL / ANY / SOME子查詢' -您不能在NOT IN運(yùn)算符的直接子查詢中使用LIMIT子句。
幸運(yùn)的是,使用中間子查詢使我們能夠繞過這兩個(gè)限制。
Nicole指出,可以針對(duì)某些用例(例如這一用例)顯著優(yōu)化此查詢。我建議您也閱讀該答案,以查看它是否適合您。
添加回答
舉報(bào)