Como hacer un update from select en MySQL

 

Una de las sentencias más útiles en SQL es la de Update a partir de una Select mediante una join entre la tabla que se va a actualizar y la tabla de la que se van a buscar los nuevos valores que se escribirán.

En MySQL esta sentencia se puede hacer con esta sencilla sintaxis:

update tabla1
inner join tabla2 on tabla1.id_tabla2 = tabla2.id
set tabla1.campo=tabla2.language

Un ejemplo real:

update field_data_body
inner join node on field_data_body.entity_id=node.nid
set field_data_body.language=node.language

 

Ojo con la correspondencia entre campos mejor de 1 a 1

Update con Join desde tabla con diferente nivel de agregaciónLo único que hay que tener en cuenta es que el campo por el que se hace la join lo ideal es que sea clave en la segunda tabla, porque si no a cada valor de un registro del campo a actualizar le podría corresponder más de un valor en la tabla con la que se hace la join.

En ese caso, podemos encontrarnos con resultados no esperados, ya que la actualización se realizará con el valor de sólo uno de los registros con los que enlace cada registro de la primera tabla.

Si es lo que buscamos ya está bien, pero si la correspondencia es de uno a varios registros y lo que queremos es guardar en cada campo de la primera tabla un valor agregado, como la suma, la media o el valor máximo, de todos los registros que tienen correspondencia en la segunda tabla, tendremos que complicar un poco más la sentencia.

Este tema lo comento en detalle el post Como hacer en SQLServer un update a partir de una select con registros agregados, es sobre SQL Server, pero para aplicarlo a MySQL sólo hay que adaptar la sintaxis.