web-dev-qa-db-fra.com

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

Pourquoi cette requête ne fonctionne 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 ce message: "Vous ne pouvez pas spécifier la table cible" recent_edits "pour la mise à jour dans la clause FROM

36
markzzz

Essayez de cette façon

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);
93
Nicola Cossu

Vous ne pouvez pas post-traiter une table qui est verrouillée pour suppression. en utilisant le hack select * from (query) comme les états de Nicola générera une table temporaire au lieu d'un accès direct.

Modifier - assurez-vous de donner un ID aux tables que vous utilisez car il est imbriqué et nécessitera un ID unique pour chaque table.

20
Elysiumplain