2011-05-24 81 views
33

我爲最近遇到的錯誤放了一個測試表。它涉及在嘗試從MySQL表中刪除單個記錄時使用LIMIT。DELETE語句上的MySQL LIMIT

我說的錯誤是「您的SQL語法錯誤;檢查對應於你的MySQL服務器版本使用附近的‘LIMIT 1’在行正確的語法手冊1

把我放在一起的表稱爲測試;它有3列,id,名稱創建。我用幾條記錄填充表格,然後嘗試刪除一條記錄。以下是我用來試圖完成這一點的陳述。

DELETE t FROM test t WHERE t.name = 'foo' LIMIT 1

不使用LIMIT 1的,則執行該語句就好了,當然,如果沒有需要它,我不會使用限制。

我完全知道我可以使用其他語句來成功完成此DELETE。見下: DELETE FROM test WHERE name = 'foo' LIMIT 1

但是我的問題集中在爲什麼第一個聲明不與LIMIT工作。

所以我的問題是,我做了錯誤的關於第一個語句產生這個錯誤?

回答

18

刪除查詢只允許DELETE'命令'後的修飾符告訴數據庫什麼/如何處理事情。

看到this page

+10

「但是,您不能在多表DELETE中使用ORDER BY或LIMIT」。 這似乎回答我的問題。 – Andre 2011-05-24 15:06:13

+1

是的 - 抱歉沒有從OP讀取,但你怎麼說從關節刪除是正確的 – 2011-05-24 15:17:03

24

只需使用

DELETE FROM test WHERE 1= 1 LIMIT 10 
+1

OP明確表示,他知道這是工作......「我完全知道我可以使用另一種說法[...] DELETE FROM test WHERE name ='foo'LIMIT 1'「 – 2015-03-05 15:59:43

2

使用row_count - your_desired_offset

所以,如果我們有10行,並希望以抵消3

10 - 3 = 7 

現在查詢delete from table where this = that order asc limit 7保持最後3和order desc來ke EP第3:

$row_count - $offset = $limit 

Delete from table where entry = criteria order by ts asc limit $limit 
4
DELETE t.* FROM test t WHERE t.name = 'foo' LIMIT 1 

@Andre如果我明白你的要求,我覺得唯一缺少的是T * FROM之前。