Del mismo modo que ante una consulta que requiera datos de varias tablas recurrimos a join para obtener la solución, en una instrucción update o delete también podemos hacerlo. Lo que sigue utiliza la sintaxis propia de MySQL, pero otros SGBD (como SQL Server o PostgreSQL) también permiten hacerlo de forma similar.
Supongamos que disponemos de estas tablas, Articulo, con datos de precio de los artículos de una BD y Proveedor, con los proveedores que suministran los artículos:
Articulo +----+--------+------+ | id | precio | id_p | +----+--------+------+ | 1 | 10 | 1 | | 2 | 25 | 2 | | 3 | 50 | 2 | +----+--------+------+
Proveedor +------+--------+------------+ | id_p | nombre | incremento | +------+--------+------------+ | 1 | Abc | 10 | | 2 | Xyz | 5 | +------+--------+------------+
Queremos incrementar el precio de los artículos que suministra el proveedor ABC, con el incremento indicado en la propia tabla Proveedor. Para ello podemos ejecutar la siguiente instrucción:
update Articulo
set precio = precio * (select 1+incremento/100
from Proveedor
where nombre = 'ABC')
where id_p = (select id_p
from Proveedor
where nombre = 'ABC');
Otra forma de hacerlo es utilizar un join para que los datos de las dos tablas estén disponibles para la instrucción. Veámoslo:
update Articulo A join Proveedor P on A.id_p = P.id_p
set precio = precio * (1+incremento/100)
where nombre = 'ABC';
No hay comentarios:
Publicar un comentario