DELETE avec des jointures

Supprimer des tuples dans une requête impliquant plusieurs tables.

15 avril 2011

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()
	
Par
Créateur et administrateur.

Dans la même catégorie

MySQL: comment faire une requête sur la description d'une table
MySQL : order by selon la valeur des champs
MySQL ON DUPLICATE KEY UPDATE : insérer ou mettre à jour une ligne
MySQL : une table pivot dynamique
SQL : faire un select sur une liste de valeurs
MySQL : créer une table à partir d'un select
MySQL : copier une table
MySQL REPLACE : insérer ou mettre à jour une ligne
MSSQL : Trouver le message qui correspond à un code d'erreur
MySQL : Comment autoriser les connexions distantes ?
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

Commentaire(s)