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!