Mise à jour: Cette réponse couvre l'erreur générale de classification. Pour une réponse précise sur la façon de mieux gérer les OP exact de requête, consultez DanDarc réponse
Dans MySQL, vous ne pouvez pas modifier la même table que vous utilisez dans la partie SELECT.
Ce comportement est documenté à:
http://dev.mysql.com/doc/refman/5.6/en/update.html
Vous devrez vous arrêter à l'aide de la sous-requête imbriquée et l'exécution de l'opération en deux parties, ou encore utiliser une simple clause where.
Ci-dessous est le Baron Schwartz, publié au Nabble:
Cependant, vous pouvez faire multi-tableau des mises à jour comme
ce:
UPDATE tbl AS a
INNER JOIN tbl AS b ON ....
SET a.col = b.col
Si vous avez absolument besoin de la sous-requête, il existe une solution de contournement, mais c'est
moche, pour plusieurs raisons, y compris la performance:
UPDATE tbl SET col = (
SELECT ... FROM (SELECT.... FROM) AS x);
Le imbriquée sous-requête dans la clause from crée un implicite temporaire
de la table, de sorte qu'il ne compte pas comme la même table que vous utilisez la mise à jour.