Maison >base de données >tutoriel mysql >Comment supprimer des enregistrements d'une table enfant à l'aide d'un JOIN dans MySQL ?

Comment supprimer des enregistrements d'une table enfant à l'aide d'un JOIN dans MySQL ?

DDD
DDDoriginal
2025-01-20 17:13:11532parcourir

How to Delete Records from a Child Table Using a JOIN in MySQL?

Utilisez JOIN pour supprimer les enregistrements de sous-table dans MySQL

Dans les bases de données relationnelles telles que MySQL, la suppression d'enregistrements peut impliquer plusieurs tables et relations complexes. Un scénario est celui où vous devez supprimer des enregistrements d’une table enfant en fonction d’une condition impliquant la table parent.

Scène :

Considérez la structure de base de données suivante :

  • table clients, client_id comme clé primaire
  • table des projets, project_id comme clé primaire, client_id comme clé étrangère
  • table des publications, post_id comme clé primaire, project_id comme clé étrangère

Cible :

Supposons que vous souhaitiez supprimer toutes les publications associées à un client donné en supprimant le client lui-même. Cependant, la table posts ne fait pas directement référence à client_id. Il fait uniquement référence à project_id.

Tentative initiale (invalide) :

<code class="language-sql">DELETE 
FROM posts
INNER JOIN projects ON projects.project_id = posts.project_id
WHERE projects.client_id = :client_id;</code>

Solution :

Afin de corriger le problème et de supprimer avec succès la publication, vous devez spécifier le nom de la table (les publications) dans l'instruction DELETE :

<code class="language-sql">DELETE posts
FROM posts
INNER JOIN projects ON projects.project_id = posts.project_id
WHERE projects.client_id = :client_id;</code>

Cette requête modifiée cible explicitement la table des publications pour la suppression en fonction des conditions de jointure.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn