Supprimer avec Join dans MySQL

Raymond Peter 15 février 2024
  1. Limitations de l’utilisation de l’instruction DELETE FROM dans MySQL
  2. Utilisation de la méthode INNER JOIN dans MySQL
  3. le résultat final en utilisant JOIN pour supprimer avec MySQL
Supprimer avec Join dans 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:

supprimer avec jointure dans mysql

Article connexe - MySQL Join