2009-04-07 19 views
6

Ich habe eine Abfrage wie folgt bekommen:mysql + update Top-n

update table 
set  status = 1 
where status = 2;  

aber ich würde nur das ich versuchte, an die Spitze 400 zu tun, wie das Hinzufügen einer ‚Grenze 0, 400‘ (wie Ich würde in einer Abfrage) aber das hat nicht funktioniert. Ich habe ein wenig gesucht und mysql scheint den TOP (n) Befehl nicht zu unterstützen, wie es SQL Server tun.

Irgendeine Idee, wie ich das tun würde?

edit: für die Zukunft, ich wurde mit dem folgenden Stil für wählt, die gut funktioniert:

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

aber in dem Update wäre es nicht mit der Arbeit „0“, egal aus welchem ​​Grunde. Ich würde dieses inkonsistente und zweideutige Verhalten betrachten, aber naja.

Antwort

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

in MySQL 5.2.0-falcon-alpha-community-nt-log Karo, bestätigt arbeiten. In Ihrem Fall ist es 0 in LIMIT 0, 400, die nicht funktioniert.

Sie können die untere Grenze nicht in UPDATE 's LIMIT verwenden.

2

Try this:

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

Sie können auch eine Bestellung per Klausel setzen

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

Dies würde jede Zeile wegen des Semikolons nach dem 2. nicht aktualisieren? –

+0

Ich denke, das Semikolon ist nur falsch aus der ursprünglichen Abfrage eingefügt, es hat hier keinen Sinn. – Quassnoi

+0

ja das ist ein Tippfehler –