Update con varias tablas

 

Update con varias tablas

Muy a menudo tenemos la necesidad de actualizar ciertos campos que requieren de una consulta previa, para estos casos podemos realizar todo en una misma sentencia.
Para realizar dicha sentencia utilizaremos un update y dentro del where o el set colocaremos el select con la consulta que necesitemos.
Tenemos que tener en cuenta que cuando la consulta forma parte del set debemos seleccionar una única fila y el mismo número de columnas que hay entre paréntesis al lado del set.

Ejemplos
Tenemos que cambiar el salario a la mitad y la comisión ponerla a 0 a todos los empleados que pertenezcan al departamento con mayor número de empleados.

Update empleado set salario=salario/2, comision=0 where departamento=(select departamento from empleado group by departamento having count(*)=(select max(count(*)) from empleado group by departamento));

En  Resu actualizar el campo MesFactura con el mes incluido en las línea de detalle de la tabla Factu que coincida con el número de factura

Update resu set MesFactura=substring(factu.DESCRIP,16,len(factu.descrip))
from resu,factu where resu.num = factu.num and left(factu.descrip,15)=’MES FACTURADO: ‘ and resu.fecha>=’2014-01-31’

Otro ejemplo, en MovimientoStock rellenar el campo CodExterno con el campo CodSage de la tabla Client

Update MovimientoStock set CodExterno=client.codsage
from MovimientoStock,client where left(MovimientoStock.Usuario,3) = client.COD
Comprobación de update correcto:
Select left(usuario,3),codexterno,client.cod,client.codsage  from MovimientoStock left join client on left(MovimientoStock.usuario,3)=client.COD

Update con Select

Update Productos SET Producto.Nombre = (SELECT Articulos.Descripcion FROM Articulos WHERE Articulos.Id = Productos.Id

Similar con la instrucción Delete. Borra los departamentos con menos de cuatro empleados

Delete from depart where departamento in (select departamento from empleado group by departamento having count(*)<4);