DELETE avec des jointuresSupprimer des tuples dans une requête impliquant plusieurs tables. |
vendredi 15 avril 2011 à 10:56
|
Beaucoup de gens pensent qu'un DELETE avec une jointure est impossible et qu'il faut forcément passer par une requête imbriquée (un SELECT dans un DELETE), c'est totalement faux. D'ailleurs la syntaxe pour réaliser un DELETE avec une jointure interne ou externe est relativement proche d'un DELETE basique, il suffit juste de préciser la table depuis laquelle supprimer les tuples entre le DELETE et le FROM.
Exemple concret : Je loue des serveurs mutualisés à des clients et chaque jour je veux que ces clients soient supprimés de ma base lorsque leur abonnement est arrivé à la date d'expiration. La subtilité c'est que je ne veux le faire que pour certains serveurs dont je connais le nom.
CODE
# Avec les tables serveurs(id, nom) et clients(id, serveur_id, fermeture_contrat)
DELETE
c
FROM
serveurs s
INNER JOIN clients c ON (c.serveur_id = s.id)
WHERE
s.nom IN ('informatix', 'gaulois', 'NlC0')
AND c.fermeture_contrat < NOW()
|
AuteurNicolas GAUTRONCréateur et administrateur. http://www.informatix.fr |
Dans la même catégorie
MySQL : Quand l'encodage veut votre peau !mysqldump : Comment ne pas prendre en compte une table ?
Dump d'une table MySQL avec une requête
MySQL en ligne de commande
Sauvegarder automatiquement une base de données MySQL

