2010-07-26 30 views
11

Lo que quiero hacer es:consulta MySQL para actualizar el campo a max (campo) + 1

UPDATE table SET field = MAX(field) + 1 WHERE id IN (1, 3, 5, 6, 8); 

La semántica de esta declaración, en mi opinión, sería primero la base de datos se apagaría y determinar por mí cuál es el valor más grande de field en table. Luego agregaría 1 a ese valor y asignaría el valor resultante a la columna field de las filas con id 1, 3, 5, 6 y 8. Parece lo suficientemente simple ...

Cuando intento ejecutar eso consulta embargo, MySQL ahoga en él y dice:

ERROR 1111 (HY000): Invalid use of group function 

¿Cuál es el ingrediente secreto que tienes que usar para obtener el resultado que deseo?

Saludos, Vic

Respuesta

18

Trate

UPDATE TABLE set field = ((SELECT selected_value FROM (SELECT MAX(field) AS selected_value FROM table) AS sub_selected_value) + 1) WHERE id in (1,3,5,6,8) 

descaradamente estafado de Here

+0

¡gracias, eso funcionó! – vicatcu

+1

+1: Incluso si te gané por dos minutos –

+1

Me derrotaste, pero te falta un paréntesis de cierre: P – GWW

5

Con el fin de conseguir alrededor de la mysql-error-1093, utilizar una subconsulta/derivados vista de tabla/línea:

UPDATE table 
     SET field = (SELECT x.max_field 
          FROM (SELECT MAX(t.field) + 1 AS max_field 
             FROM TABLE t 
             WHERE t.id IN (1,3,5,6,8)) x) 
+0

Te falta un soporte después de 't.id IN (1,3,5,6,8) **) ** x) ' – Ultrazz008

Cuestiones relacionadas