2009-04-07 14 views
6

top aggiornamento ho un query come questa:mysql + n

update table 
set  status = 1 
where status = 2;  

ma vorrei solo fare questo per il top 400. Ho provato ad aggiungere un 'limite di 0, 400' (come Vorrei in una query) ma non ha funzionato. Ho fatto qualche ricerca e mysql non sembra supportare il comando TOP (n) come fa il server sql.

Qualche idea su come farei questo?

edit: per riferimento futuro, stavo usando il seguente stile per seleziona, che ha lavorato bene:

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

ma l'aggiornamento non avrebbe funzionato con lo "0", per qualsiasi motivo. Considero questo comportamento incoerente e ambiguo, ma vabbè.

risposta

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

Controllato in MySQL 5.2.0-falcon-alpha-community-nt-log, ha confermato di lavoro.

Nel tuo caso è 0 in LIMIT 0, 400 che non funziona.

Non è possibile utilizzare il limite inferiore nel LIMIT .

2

Prova questa:

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

Si può anche mettere una clausola ORDER BY

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

Ciò aggiornerebbe ogni riga a causa del punto e virgola dopo il 2. no? –

+0

Penso che il punto e virgola sia stato semplicemente incollato dalla query originale, non ha senso qui. – Quassnoi

+0

sì questo è un errore di battitura –

Problemi correlati