Supprimer avec Join dans MySQL
-
Limitations de l’utilisation de l’instruction
DELETE FROM
dans MySQL -
Utilisation de la méthode
INNER JOIN
dans MySQL -
le résultat final en utilisant
JOIN
pour supprimer avec MySQL
Cet article de tutoriel vous montrera comment supprimer des données dans plusieurs tables à l’aide de la méthode MySQL JOIN
. Ceci est utile lorsque vous supprimez simultanément des enregistrements dans une table liés à un enregistrement spécifique dans une autre.
Limitations de l’utilisation de l’instruction DELETE FROM
dans MySQL
L’instruction DELETE FROM
permet de supprimer des lignes dans une table. Vous pouvez appliquer WHERE
pour spécifier les lignes et les conditions à respecter lors de la suppression.
Le code suivant contient deux tableaux, le premier enregistrant les marchandises des fournisseurs et leur localisation, et le second avec une liste des commerçants qui vendent ces marchandises :
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');
Tous les magasins du tableau sont basés au centre-ville, donc dans ce cas, il est inutile de tenir des registres de fournisseurs dans la zone Uptown
.
L’utilisation de DELETE
ne fonctionnera que pour une table à la fois. Vous pouvez prendre des données de la table shops
, spécifier des critères, et supprimer tous les enregistrements de la table supplier
qui correspondent à toutes les conditions.
Dans ce cas, nous supprimerons tous les enregistrements de Uptown
de la table fournisseur
en utilisant JOIN
.
Utilisation de la méthode INNER JOIN
dans MySQL
L’utilisation de la méthode INNER JOIN
vous permettra de fusionner deux tables ou plus et de supprimer plusieurs lignes en une seule fois.
Il existe des options alternatives, telles que l’utilisation de sous-requêtes, mais c’est un moyen plus pratique de faire le travail. En utilisant les exemples de tables ci-dessus, vous pouvez supprimer toutes les lignes des deux tables qui ont la valeur Uptown
.
Le code suivant cherchera l’emplacement des magasins et gardera les fournisseurs dans la zone Downtown
tout en supprimant les fournisseurs enregistrés comme Uptown
:
DELETE supplier FROM supplier
INNER JOIN shops ON supplier.category = shops.shptype
WHERE supplier.location != shops.location;
La jointure des tables était basée sur des champs qui partageaient des données similaires. Le champ de catégorie indiquait ce que les fournisseurs fournissaient et quels magasins vendaient dans ce cas.
La fusion des deux tables vous permettra de définir une seule condition de suppression. Dans ce cas, l’emplacement du fournisseur déterminera quelle ligne doit être supprimée.
Vous pouvez également supprimer les deux tables simultanément en ajoutant simplement le nom de la table après DELETE
. Cela fonctionnera si vous avez plusieurs enregistrements dans plusieurs tables.
DELETE supplier, shops FROM supplier
...
le résultat final en utilisant JOIN
pour supprimer avec MySQL
Le résultat laissera vos tables intactes tout en supprimant simultanément tous les enregistrements des fournisseurs qui ne répondent pas aux critères mentionnés ci-dessus.
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;
Ce qui précède fait correspondre tous les fournisseurs aux magasins par emplacement, Downtown
dans ce cas, et supprime toutes les lignes de la table des fournisseurs qui ne correspondent pas aux critères.
A partir de l’essai SELECT
suivant, nous pouvons voir que la table supplier
ne contient plus que des fournisseurs listés comme Downtown
:
SELECT * FROM supplier
Résultat: