2011-04-24 33 views
4
UPDATE table SET checked = 1 WHERE field = 'xxx' LIMIT 1 

工作正常,但MySQL的 - 更新與LIMIT X,Y

UPDATE table SET checked = 1 WHERE field = 'xxx' LIMIT 1, 10 

拋錯誤「#1064 - 你在你的SQL語法錯誤;檢查對應於你的MySQL服務器手冊版本爲在第1行'10'附近使用的正確語法版本

爲什麼不可能?我想更新除第一行之外的所有內容。

回答

6

LIMITUPDATE子句中僅僅是可以更新多少行的上限。

它不像在SELECT那裏你可以忽略所有的結果行的某些子範圍來處理。

如果你真的需要這樣的東西,你應該使用VIEWLIMIT限制,並執行該UPDATE

+1

嗯,它實際上使sence,但不支持在mysql ;-) – zerkms 2011-04-24 22:41:52

+0

@zerkms:同意。 – 2011-04-24 22:44:25

+0

@zerkms我也同意! – 2011-08-15 13:18:47

8
update table set checked = 1 where id in (select * from (select id from table where field = 'xxx' order by id limit 1, 10) as t) 
+0

實際上起作用。通常,mysql不支持子查詢中的限制,但將查詢嵌入到另一個查詢中的訣竅可以做到這一點! – marlar 2013-10-10 12:03:49

0

我也有類似的情況,但對我來說,我需要只更新2通過數字ID有序的行,所以我的查詢會一直是這樣的:

UPDATE myTable SET Column1='some data',Column2='some othe data' WHERE Column3='some criteria' LIMIT 1;

UPDATE myTable SET Column1='some data',Col2='some othe data' WHERE Column3='some criteria2' ORDER BY ID DESC LIMIT 1;

注意:第一個查詢隱式選擇表中的第一個匹配行,第二個查詢通過顯式顛倒順序選擇第二個匹配行。它沒有回答這個問題,但它可能會讓有類似於我的問題的人受益。