42 votes

Supprimer - Je ne peux pas spécifier la table cible ?

Pourquoi cette requête ne fonctionne-t-elle pas ?

DELETE FROM recent_edits 
WHERE trackid NOT IN 
     (SELECT DISTINCT history.trackid 
     FROM history JOIN recent_edits ON history.trackid=recent_edits.trackid 
     GROUP BY recent_edits.trackid)

Je reçois le message suivant : "Vous ne pouvez pas spécifier la table cible "recent_edits" pour la mise à jour dans la clause FROM".

109voto

Nicola Cossu Points 18168

Essayez de la manière suivante

DELETE FROM recent_edits 
WHERE trackid NOT IN 
     (select * from (SELECT DISTINCT history.trackid 
     FROM history JOIN recent_edits ON history.trackid=recent_edits.trackid 
     GROUP BY recent_edits.trackid) as t);

25voto

Elysiumplain Points 337

Il n'est pas possible de post-traiter une table verrouillée pour suppression. select * from (query) comme l'indique Nicola, génère une table temporaire au lieu d'un accès direct.

Modification - assurez-vous que vous donnez un identifiant aux tables que vous utilisez, car il s'agit d'un système imbriqué qui nécessitera un identifiant unique pour chaque table.

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