Comment faire un JOIN dans un DELETE avec MySQL

Publié le 23 Janvier 2012

Tout le monde connait la commande DELETE sous ça forme simple:

DELETE FROM ma_table WHERE mon_champ = 'ma_valeur';

Le problème c'est lorsqu'on ne connaît pas directement la valeur à mettre dans le WHERE, c'est à dire qu'on a besoin de faire une jointure sur une autre table pour déterminer les lignes à effacer.

Prenons un cas concret avec les 2 tables suivantes :

  • 'customers' qui contient une liste de client avec leur coordonnées
  • 'orders' qui contient une liste de commande

Le lien entre ces 2 tables s'effectue à l'aide de l'id du client.

Maintenant comment effacer tous les clients qui n'ont pas effectuer de commande. J'ai besoin d'une jointure entre les tables et bien c'est possible en utilisant USING:

DELETE FROM customers USING customers LEFT JOIN orders  ON (customers.id = orders.customer_id) WHERE orders.customer_id IS NULL;

ou

DELETE customers FROM customers LEFT JOIN orders  ON (customers.id = orders.customer_id) WHERE orders.customer_id IS NULL;

Rédigé par Bliz

Publié dans #MySQL

Repost 0
Commenter cet article

jean 24/09/2013 08:31


Merci, bien pratique quand on ne se rappelle plus orrectemetn la syntaxe du delte using...