J'ai deux tables, une pour les délais de travail, une pour décrire un travail. Chaque travail peut prendre un statut et certains statuts signifient que les échéances des travaux doivent être supprimées de l'autre tableau.
Je peux facilement SELECT
les emplois/délais qui répondent à mes critères avec un 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
table pas deadline
)
Mais lorsque je souhaite supprimer ces lignes de deadline
, MySQL renvoie une erreur. Ma requête est:
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 votre syntaxe SQL; Consultez le manuel correspondant à la version de votre serveur MySQL pour connaître la syntaxe correcte à utiliser près de 'LEFT JOIN
job
le on delay.job_id = job.job_id WHEREstatus
=' szaml 'à la ligne 1
Comment transformer mon SELECT
en une requête DELETE
fonctionnelle?
Vous devez simplement spécifier sur quelles tables appliquer le DELETE
.
Ne supprimez que les rangées deadline
:
DELETE `deadline` FROM `deadline` LEFT JOIN `job` ....
Supprimez les lignes deadline
et job
:
DELETE `deadline`, `job` FROM `deadline` LEFT JOIN `job` ....
Ne supprimez que les rangées job
:
DELETE `job` FROM `deadline` LEFT JOIN `job` ....
Si vous utilisez "table en tant que", spécifiez le supprimer.
Dans l'exemple, je supprime toutes les lignes de la table_1 qui n'existent pas dans la table_2.
DELETE t1 FROM `table_1` t1 LEFT JOIN `table_2` t2 ON t1.`id` = t2.`id` WHERE t2.`id` IS NULL
DELETE FROM deadline where ID IN (
SELECT d.ID FROM `deadline` d 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');
Je ne suis pas sûr que ce type de sous-requête fonctionne dans MySQL, mais essayez-le. Je suppose que vous avez une colonne ID dans votre tableau d'échéance.
Essaye ça:
DELETE `deadline`
FROM `deadline`
INNER JOIN `job` ON `deadline`.`job_id` = `job`.`id`
WHERE `job`.`id` = 123
MySQL vous permet d'utiliser la clause INNER JOIN dans l'instruction DELETE pour supprimer des lignes d'une table et les lignes correspondantes d'une autre table.
Par exemple, pour supprimer les lignes des tables T1 et T2 qui répondent à une condition spécifiée, utilisez l'instruction suivante:
DELETE T1, T2
FROM T1
INNER JOIN T2 ON T1.key = T2.key
WHERE condition;
Notez que vous mettez les noms de table 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 supprimera uniquement les lignes de la table T1.
J'espère que cette aide.