Mysql : DELETE sur plusieurs tables avec jointure

Publié le 09 avril 2008 par Tonylepsie

Il arrive parfois qu’on est besoin des faire des suppressions de lignes sur plusieurs tables en même temps. Par exemple, on veut supprimer une catégorie et tous les articles qui appartiennent à cette catégorie. La catégorie appartient à la table catégorie et les articles à la table article et ils sont reliés par l’identifiant de la catégorie (id_cat pour la table categorie et fk_cat pour la table billet - fk pour foreign key)

Deux cas de figure : on veut supprimer sur les 2 tables d’un coup ou on veut supprimer qu’une sur une seule table.

DELETE sur 2 tables MySQL

Pour reprendre mon exemple de catégorie et d’articles, cela revient à supprimer la catégorie et les articles liés à cette catégorie.

La requête devra alors ressembler à ça :

Script sql

DELETE categorie, article FROM categorie, article WHERE id_cat=fk_cat AND fk_cat=1

DELETE sur une table MySQL nécessitant une jointure

Imaginons que vous voulez supprimer tous les articles de la catégorie 1 qui ont pour tag ‘prout’ (je sais…) et supprimer aussi le tag (même si c’est pas très logique car des articles d’une autre catégorie peuvent être à ce tag…. mais bon c’est un exemple, on va commencer à se faire chier avec ce genre de considération…).

On obtiendrait alors une requête de ce style :

Script sql

DELETE FROM tag, article USING tag, article,categorie WHERE  id_cat=fk_cat AND fk_cat=1 AND tag=‘prout’

Et voilà, finis les 3 requêtes delete de suite dans nos gestions de contenus de vos sites