Maison >base de données >tutoriel mysql >Comment puis-je supprimer des lignes à l'aide d'un LEFT JOIN dans MySQL ?

Comment puis-je supprimer des lignes à l'aide d'un LEFT JOIN dans MySQL ?

DDD
DDDoriginal
2024-11-29 03:53:17372parcourir

How Can I Delete Rows Using a LEFT JOIN in MySQL?

Suppression de lignes à l'aide de LEFT JOIN dans MySQL

Dans MySQL, la création d'un LEFT JOIN peut être un outil puissant pour récupérer des données de plusieurs tables. Cependant, tenter d'utiliser la même syntaxe LEFT JOIN pour une opération DELETE peut entraîner une ambiguïté et des erreurs.

Le problème

Considérez un scénario dans lequel nous avons un « délai » " table et une table "travail". Chaque tâche a un statut, et certains statuts indiquent que l'échéance associée doit être supprimée. Un LEFT JOIN peut être utilisé pour sélectionner les lignes souhaitées :

SELECT * FROM `deadline`
LEFT JOIN `job` ON deadline.job_id = job.job_id
WHERE `status` = 'szamlazva'
OR `status` = 'szamlazhato'
OR `status` = 'fizetve'
OR `status` = 'szallitva'
OR `status` = 'storno'

Cependant, lorsque vous tentez de supprimer ces lignes en utilisant la même syntaxe LEFT JOIN :

DELETE FROM `deadline`
LEFT JOIN `job`
ON deadline.job_id = job.job_id
WHERE `status` = 'szamlazva'
OR `status` = 'szamlazhato'
OR `status` = 'fizetve'
OR `status` = 'szallitva'
OR `status` = 'storno'

MySQL générera une erreur .

La solution

Pour réussir à supprimer le lignes, nous devons spécifier explicitement les tables à affecter. Cela se fait en plaçant les noms de table avant le mot-clé DELETE.

Suppression uniquement des lignes de date limite

Pour supprimer uniquement les lignes de date limite, utilisez la requête suivante :

DELETE `deadline` FROM `deadline`
LEFT JOIN `job` ON deadline.job_id = job.job_id
WHERE `status` = 'szamlazva'
OR `status` = 'szamlazhato'
OR `status` = 'fizetve'
OR `status` = 'szallitva'
OR `status` = 'storno'

Suppression des lignes de date limite et de travail

Pour supprimer les deux la date limite et les lignes de travail, utilisez la requête suivante :

DELETE `deadline`, `job` FROM `deadline`
LEFT JOIN `job` ON deadline.job_id = job.job_id
WHERE `status` = 'szamlazva'
OR `status` = 'szamlazhato'
OR `status` = 'fizetve'
OR `status` = 'szallitva'
OR `status` = 'storno'

Suppression uniquement des lignes de travail

Pour supprimer uniquement les lignes de travail, utilisez la requête suivante :

DELETE `job` FROM `deadline`
LEFT JOIN `job` ON deadline.job_id = job.job_id
WHERE `status` = 'szamlazva'
OR `status` = 'szamlazhato'
OR `status` = 'fizetve'
OR `status` = 'szallitva'
OR `status` = 'storno'

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