80 - Borrar registros consultando otras tablas (delete - 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.
La tabla "libros" tiene la siguiente estructura:
-codigo: int unsigned auto_increment, -titulo: varchar(30), -autor: varchar(30), -codigoeditorial: tinyint unsigned, -clave primaria: codigo.
La tabla "editoriales" tiene esta estructura:
-codigo: tinyint unsigned auto_increment, -nombre: varchar(20), -clave primaria: codigo.
Ambas tablas contienen registros.
Queremos eliminar todos los libros de la editorial "Emece" pero no recordamos el código de dicha editorial.
Podemos hacerlo en 2 pasos:
1º paso: consultamos el código de la editorial "Emece":
select codigo from editoriales where nombre='Emece';
recordamos el valor devuelto (valor 2) o lo almacenamos en una variable.
2º paso: borramos todos los libros con código de editorial "2":
delete libros where codigoeditorial=2;
O podemos realizar todo en un solo paso:
delete libros from libros join editoriales on libros.codigoeditorial=editoriales.codigo where editoriales.nombre='Emece';
Es decir, usamos "delete" junto al nombre de la tabla de la cual queremos eliminar registros, luego realizamos el "join" correspondiente nombrando las tablas involucradas y agregamos la condición "where".