MySQL: actualizar un campo con la suma de unos registros de otra tabla
Si tenemos una tabla que queremos actualizar con la suma de valores de otra tabla podemos hacerlo vÃa programación (lo he visto en un programa que he tenido que modificar recientemente) o lo podemos hacer directamente usando una consulta MySQL.
En este ejemplo en concreto que me encontré habÃa dos tablas:
facturas:
- num_factura
- base_imponible
factura_detalle:
- num_factura
- articulo
- precio
La tabla factura_detalle contiene, como el nombre indica, el detalle de las facturas. Cada lÃnea es un artÃculo y su precio.
La tabla facturas tenÃa un campo base_imponible que era necesario actualizar con el precio de los artÃculos de la factura en la tabla factura_detalle.
Esto se puede hacer directamente usando una subconsulta:
UPDATE facturas SET base_imponible = ( SELECT sum( precio ) total_calculado FROM factura_detalle WHERE num_factura = '30') WHERE num_factura = '30';
La subconsulta se encarga de buscar todos los registros de la tabla de detalle y sumar los precios:
SELECT sum( precio ) total_calculado FROM factura_detalle WHERE num_factura = '30')
y la consulta principal lo que hace es asignar ese valor, que serÃa algo asà suponiendo que la anterior hubiese devuelto el valor ‘300′:
UPDATE facturas SET base_imponible = '300' WHERE num_factura = '30';
