Eliminar con Join en MySQL

Raymond Peter 30 enero 2023
  1. Limitaciones en el uso de la instrucción DELETE FROM en MySQL
  2. Usando el método INNER JOIN en MySQL
  3. El resultado final al usar JOIN para borrar con MySQL
Eliminar con Join en MySQL

Este artículo del tutorial le mostrará cómo eliminar datos en varias tablas usando el método JOIN de MySQL. Esto es útil cuando elimina simultáneamente registros en una tabla relacionados con un registro específico en otra.

Limitaciones en el uso de la instrucción DELETE FROM en MySQL

La declaración DELETE FROM se usa para eliminar filas en una tabla. Puede aplicar DÓNDE para especificar las filas y las condiciones que se deben cumplir al eliminar.

El siguiente código contiene dos tablas, la primera que registra los productos del proveedor y su ubicación, y la segunda con una lista de los dueños de las tiendas que venden estos productos:

Create Table supplier (
    suppId INTEGER PRIMARY KEY,
    category TEXT NOT NULL,
    location TEXT NOT NULL
);
Create Table shops (
    owner TEXT NOT NULL,
    shptype TEXT NOT NULL,
    area TEXT NOT NULL
);

INSERT INTO supplier VALUES (0001, 'Veggies', 'Downtown');
INSERT INTO supplier VALUES (0002, 'Fruits', 'Downtown');
INSERT INTO supplier VALUES (0003, 'Dairy', 'Downtown');
INSERT INTO supplier VALUES (0004, 'Veggies', 'Uptown');
INSERT INTO supplier VALUES (0005, 'Fruits', 'Uptown');
INSERT INTO supplier VALUES (0006, 'Dairy', 'Uptown');

INSERT INTO shops VALUES ('Mark', 'Veggies', 'Downtown');
INSERT INTO shops VALUES ('Mark', 'Fruits', 'Downtown');
INSERT INTO shops VALUES ('Susan', 'Dairy', 'Downtown');

Todas las tiendas de la tabla están ubicadas en el centro de la ciudad, por lo que en este caso no tiene sentido mantener registros de proveedores en el área Uptown.

El uso de DELETE solo funcionará para una mesa a la vez. Puede tomar datos de la tabla shops, especificar criterios y eliminar todos los registros de la tabla supplier que cumplan todas las condiciones.

En este caso, eliminaremos todos los registros de Uptown de la tabla supplier usando JOIN.

Usando el método INNER JOIN en MySQL

El uso del método INNER JOIN le permitirá fusionar dos o más tablas y eliminar varias filas de una sola vez.

Existen opciones alternativas, como el uso de subconsultas, pero esta es una forma más práctica de hacer el trabajo. Usando las tablas de ejemplo anteriores, puede eliminar todas las filas en ambas tablas que tienen el valor Uptown.

El siguiente código buscará la ubicación de las tiendas y mantendrá a los proveedores en la zona Centro mientras elimina los proveedores registrados como Uptown:

DELETE supplier FROM supplier
INNER JOIN shops ON supplier.category = shops.shptype
WHERE supplier.location != shops.location;

La unión de tablas se basó en campos que compartían datos similares. El campo de categoría mostró qué proveedores proporcionaron y qué tiendas vendieron en este caso.

Fusionar las dos tablas le permitirá definir solo una condición para la eliminación. En este caso, la ubicación del proveedor determinará qué fila se eliminará.

También puede eliminar ambas tablas simultáneamente simplemente agregando el nombre de la tabla después de DELETE. Esto funcionará si tiene varios registros en más de una tabla.

DELETE supplier, shops FROM supplier
...

El resultado final al usar JOIN para borrar con MySQL

El resultado dejará sus tablas intactas y, al mismo tiempo, eliminará todos los registros de proveedores que no cumplan con los criterios mencionados anteriormente.

Create Table supplier (
    suppId INTEGER PRIMARY KEY,
    category TEXT NOT NULL,
    location TEXT NOT NULL
);
Create Table shops (
    owner TEXT NOT NULL,
    shptype TEXT NOT NULL,
    location TEXT NOT NULL
);

INSERT INTO supplier VALUES (0001, 'Veggies', 'Downtown');
INSERT INTO supplier VALUES (0002, 'Fruits', 'Downtown');
INSERT INTO supplier VALUES (0003, 'Dairy', 'Downtown');
INSERT INTO supplier VALUES (0004, 'Veggies', 'Uptown');
INSERT INTO supplier VALUES (0005, 'Fruits', 'Uptown');
INSERT INTO supplier VALUES (0006, 'Dairy', 'Uptown');

INSERT INTO shops VALUES ('Mark', 'Veggies', 'Downtown');
INSERT INTO shops VALUES ('Mark', 'Fruits', 'Downtown');
INSERT INTO shops VALUES ('Susan', 'Dairy', 'Downtown');
-- delete function 
DELETE supplier FROM supplier
INNER JOIN shops ON supplier.category = shops.shptype
WHERE supplier.location != shops.location;

Lo anterior hace coincidir todos los proveedores con las tiendas por ubicación, Downtown en este caso, y elimina todas las filas de la tabla de proveedores que no coinciden con los criterios.

De la siguiente prueba SELECT, podemos ver que la tabla proveedor ahora solo contiene proveedores enumerados como Downtown:

SELECT * FROM supplier

Salir:

eliminar con unirse en mysql

Artículo relacionado - MySQL Join