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".

Retornar