2009-04-07 12 views
6

Mam zapytanie tak:mysql + aktualizacji top n

update table 
set  status = 1 
where status = 2;  

ale chciałbym to zrobić tylko do górnej 400. Próbowałem dodanie limitu 0, '400' (jak Chciałbym zapytać), ale to nie zadziałało. Zrobiłem kilka wyszukiwania i mysql nie obsługuje polecenia TOP (n), tak jak robi to serwer sql.

Każdy pomysł, jak to zrobić?

edit: na przyszłość, używałem następujący styl wybiera, który pracował w porządku:

select * 
from table 
where ... limit 0, 400; 

ale w aktualizacji nie będzie współpracować z „0”, bez względu na przyczynę. Rozważałbym to niespójne i niejednoznaczne zachowanie, ale no cóż.

Odpowiedz

17
UPDATE table 
SET  status = 1 
WHERE status = 2 
ORDER BY id 
LIMIT 400 

sprawdzone w MySQL 5.2.0-falcon-alpha-community-nt-log potwierdził pracy.

W twoim przypadku jest to 0 w LIMIT 0, 400, które nie działa.

Nie można użyć dolnej granicy w UPDATE 's LIMIT.

2

Spróbuj tego:

update table 
set  status = 1 
where status = 2 
LIMIT 400 

Można również umieścić zamówienia przez klauzuli

update table 
set  status = 1 
where status = 2 
ORDER BY id 
LIMIT 400 
+0

To zaktualizuje każdy wiersz ze względu na średnik po 2. nie? –

+0

Myślę, że średnik jest po prostu błędnie wklejony z pierwotnego zapytania, nie ma sensu tutaj. – Quassnoi

+0

tak to jest literówka –