210 votes

Suppression de lignes avec MySQL LEFT JOIN

J'ai deux tableaux, l'un pour les échéances des travaux, l'autre pour décrire un travail. Chaque travail peut prendre un statut et certains statuts signifient que les délais des travaux doivent être supprimés de l'autre table.

Je peux facilement SELECT les emplois/délais qui répondent à mes critères avec une LEFT JOIN :

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'

( status appartient à job la table n'est pas deadline )

Mais quand j'aimerais supprimer ces lignes de deadline MySQL lance une erreur. Ma requête est la suivante :

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'

L'erreur MySQL ne dit rien :

Vous avez une erreur dans la syntaxe SQL ; consultez le manuel correspondant à la version de votre serveur MySQL pour connaître la syntaxe à utiliser près de "LEFT JOIN". job ON deadline.job_id = job.job_id WHERE status = 'szaml' à la ligne 1

Comment puis-je transformer mon SELECT en un travail DELETE une requête ?

1voto

Tahir Points 253

MySQL vous permet d'utiliser la clause INNER JOIN dans l'instruction DELETE pour supprimer les lignes d'une table et les lignes correspondantes dans une autre table.

Par exemple, pour supprimer les lignes des tables T1 et T2 qui répondent à une condition spécifiée, vous utilisez l'instruction suivante :

DELETE T1, T2
FROM T1
INNER JOIN T2 ON T1.key = T2.key
WHERE condition;

Remarquez que vous avez placé les noms des tables T1 et T2 entre les mots-clés DELETE et FROM. Si vous omettez la table T1, l'instruction DELETE supprime uniquement les lignes de la table T2. De même, si vous omettez la table T2, l'instruction DELETE ne supprimera que les lignes de la table T1.

J'espère que cela vous aidera.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X