sql >> Base de Datos >  >> RDS >> Mysql

MYSQL:cómo actualizar un campo para todos los elementos resultantes del grupo por declaración de selección

¿Quiere decir que desea actualizar la tabla donde el campo 1, el campo 2 y el campo 3 están en el conjunto devuelto por su declaración de selección?

p.ej.

update table, 
     ( select field1, field2, field3 
       FROM table WHERE field1= 5  AND field_flag =1 
       GROUP BY field1, field2, field3 limit 1000 ) temp
set table.field_flag = 99 
where table.field1=temp.field1 and table.field2=temp.field2 and table.field3 = temp.field3

Tenga en cuenta que la actualización podría actualizar muchas más de 1000 filas.

También se podría usar una tabla temporal:

create temporary table temptab as
select field1, field2, field3 
FROM table WHERE field1= 5  AND field_flag =1 
GROUP BY field1, field2, field3 limit 1000 

 update table, 
        temptab temp
 set table.field_flag = 99 
 where table.field1=temp.field1 and table.field2=temp.field2 and table.field3 = temp.field3

Esto tiene la ventaja de que temptab se puede usar más tarde, y también que se pueden agregar índices para acelerar la actualización:

create index on temptab (field1, field2, field3);