79 - Actualización en cascada (update - join) |
Tenemos la tabla "libros" en la cual almacenamos los datos de los libros de nuestra biblioteca y la tabla "editoriales" que almacena el nombre de las distintas editoriales y sus códigos.
Eliminamos las tablas si existen:
drop table if exists libros, editoriales;
Creamos las tablas con las siguientes estructuras:
create table libros( codigo int unsigned auto_increment, titulo varchar(40), autor varchar(30), codigoeditorial tinyint unsigned, precio decimal(5,2) unsigned, primary key(codigo) ); create table editoriales( codigo tinyint unsigned auto_increment, nombre varchar(20), primary key(codigo) );
Ingresamos algunos registros:
insert into editoriales values(1,'Planeta'); insert into editoriales values(2,'Emece'); insert into editoriales values(3,'Paidos'); insert into editoriales values(4,'Plaza & Janes'); insert into libros values (1,'El aleph','Borges',2,44.20); insert into libros values (2,'Alicia en el pais de las maravillas','Lewis Carroll',1,12.33); insert into libros values (3,'Matematica estas ahi','Paenza',2,9.99); insert into libros values (4,'Martin Fierro','Jose Hernandez',3,17.22); insert into libros values (5,'Martin Fierro','Jose Hernandez',2,23.56);
Queremos modificar el código de la editorial "Emece" a "9" y también todos los "codigoeditorial" de los libros de dicha editorial. Podemos hacerlo en 3 pasos: 1) buscar el código de la editorial "Emece" (nos retorna 2); 2) actualizar el código en la tabla "editoriales" y 3) actualizar todos los libros de dicha editorial con el valor "9". O podemos hacerlo en una sola sentencia:
update libros as l join editoriales as e on l.codigoeditorial=e.codigo set l.codigoeditorial=9, e.codigo=9 where e.nombre='Emece';
Verificamos el cambio en ambas tablas:
select * from libros; select * from editoriales;