Erreur MySQL 1093 : mise à jour de la table cible dans la sous-requête
Lors de la tentative d'exécution de la requête suivante dans MySQL :
UPDATE giveaways SET winner = '1' WHERE ID = (SELECT MAX(ID) FROM giveaways)
Vous pouvez rencontrer l'erreur suivante :
#1093 - You can't specify target table 'giveaways' for update in FROM clause
Cette erreur se produit car MySQL n'autorise pas la table cible d'une instruction UPDATE (cadeaux) à utiliser dans une sous-requête au sein de la clause WHERE.
Adaptation de la solution à partir de l'article de référence
Pour résoudre ce problème , adaptez la solution fournie dans l'article que vous avez référencé en utilisant une sous-requête imbriquée. Voici la requête mise à jour :
UPDATE giveaways SET winner='1' WHERE Id = (SELECT Id FROM (SELECT MAX(Id) AS id FROM giveaways) AS t)
Cette requête sélectionne efficacement la valeur Id maximale de la table des cadeaux en tant que sous-requête (t), puis utilise cette valeur pour mettre à jour la colonne gagnante dans la requête externe.
En imbriquant la sous-requête, vous évitez de spécifier la table cible (cadeaux) dans la clause FROM de la sous-requête, résolvant ainsi l'erreur.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!