J'ai deux tableaux, un pour les délais de travail, un 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 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
n'appartient pas à la job
table deadline
)
Mais lorsque je souhaite supprimer ces lignes deadline
, MySQL génère 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; vérifiez le manuel qui correspond à votre version de serveur MySQL pour la bonne syntaxe à utiliser près de 'LEFT JOIN
job
ON date limite.job_id = job.job_id WHEREstatus
=' szaml 'à la ligne 1
Comment puis-je transformer mon SELECT
en une DELETE
requête fonctionnelle ?
la source
DELETE
etFROM
, mais la requête s'est bien déroulée quand j'ai appuyé sur Go.Si vous utilisez "table as", indiquez-le à supprimer.
Dans l'exemple, je supprime toutes les lignes de table_1 qui n'existent pas dans table_2.
la source
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 des délais.
la source
DELETE
pour que la requête soit sans ambiguïté. L'utilisationIn
avec des sous-requêtes rend tout beaucoup plus lent. Il vaut mieux éviter.DELETE
etFROM
.Essaye ça:
la source
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 des lignes des tables T1 et T2 qui remplissent une condition spécifiée, vous utilisez l'instruction suivante:
Notez que vous placez 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.
la source