Supprimer d'une table avec jointure

j'essaie de supprimer des enregistrements d'une base de données basée sur un critère de sélection d'une autre. Nous avons deux tables, emailNotification qui stocke une liste de travaux et des e-mails. Alors on a du travail. Je veux supprimer les notifications d'email pour les emplois qui ont été fermés. J'ai trouvé quelques exemples plus anciens sur Stackoverflow qui m'ont mené à ce type de syntaxe (j'ai déjà essayé de faire la jointure avant l'où).

DELETE FROM emailNotification
WHERE notificationId IN (
 SELECT notificationId FROM emailNotification e
 LEFT JOIN jobs j ON j.jobId = e.jobId
WHERE j.active = 1
)

j'obtiens l'erreur, vous ne pouvez pas spécifier la table cible 'emailNotication' pour mise à jour dans la Clause FROM.

31
demandé sur Brian Tompsett - 汤莱恩 2010-11-11 16:10:22

3 réponses

Je ne suis pas sûr de vos exigences. Ce que j'ai compris de votre question Est que vous voulez supprimer tous les e-mails des emplois qui sont fermés. essayez celui-ci;

DELETE e FROM emailNotification e 
LEFT JOIN jobs j ON j.jobId = e.jobId 
WHERE j.active = 1 AND CURDATE() < j.closeDate
76
répondu Naved 2010-11-11 13:29:19

MySQL supprimer des enregistrements avec JOIN

Supprimer plusieurs enregistrements à partir de plusieurs table à l'aide de Simple Requête est Comme ci-dessous:

vous utilisez généralement INNER JOIN dans L'énoncé SELECT pour sélectionner des enregistrements d'une table qui ont des enregistrements correspondants dans d'autres tables. Nous pouvons également utiliser la clause de jointure interne avec L'énoncé DELETE pour supprimer des enregistrements d'une table et aussi les enregistrements correspondants dans d'autres tables, par exemple, pour supprimer des enregistrements des tables T1 et T2 qui répondent condition particulière, vous 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 DELETE et FROM. Si vous omettez la table T1, L'état de suppression ne supprime que les enregistrements de la table T2, et si vous omettez la table T2, seuls les enregistrements de la table T1 sont supprimés.

la condition de jointure T1.key = T2.clé spécifie les enregistrements correspondants dans le tableau T2 qui doivent être supprimés.

la condition dans la clause WHERE spécifie ce qui suit: les enregistrements T1 et T2 qui doivent être supprimés.

6
répondu Aman Garg 2015-08-05 06:41:35

Vous pouvez essayer quelque chose comme:

DELETE FROM emailNotification
WHERE jobId IN (
 SELECT jobId FROM jobs j
 WHERE j.active = 1
)
3
répondu Patrick McDonald 2010-11-11 13:31:28