Vous avez une référence supplémentaire à la table emails_bodies
dans votre requête DELETE
. Essayez ceci:
DELETE emails.*
FROM emails
INNER JOIN emails_bodies ON emails_bodies.email_id = emails.id
WHERE emails.date_modified < "2013-01-01"
J'ai aussi retiré l'une des tables de la liste de sélection, car MySQL ne supprime pas de deux tables dans une requête. Une option pour que cela se produise serait de mettre en place une mise en cascade entre une table parente (par exemple emails
) et une table enfant (par exemple emails_bodies
). Puis la suppression d'un enregistrement dans emails
supprimerait automatiquement les références de clé étrangère dans emails_bodies
.
Quant à savoir pourquoi vous obtenez une erreur Not unique table/alias
, MySQL interprété votre requête comme quelque chose le long des lignes de ce qui suit:
DELETE emails, emails_bodies
FROM emails
INNER JOIN emails_bodies -- cross join, since no ON condition given
INNER JOIN emails_bodies ON emails_bodies.email_id = emails.id
WHERE emails.date_modified < "2013-01-01"
que vous utilisiez le même nom de table deux fois, sans donner chacun un alias unique.
Bonne description. Votre solution supprimera-t-elle des lignes des deux tables ou simplement des "emails"? – David
@David J'étais tellement pressé de poster que je n'ai même pas remarqué votre liste de sélection. Ne fais pas ça. Si vous avez vraiment besoin de supprimer des deux tables à la fois, essayez d'utiliser la suppression en cascade avec des clés étrangères. –
Je l'ai, je vais juste exécuter deux requêtes de suppression, car je ne suis pas sûr de la façon de cascade. – David