Maison >base de données >tutoriel mysql >Pourquoi MySQL renvoie-t-il l'erreur 1093 lors de la mise à jour d'une table à l'aide d'une sous-requête ?

Pourquoi MySQL renvoie-t-il l'erreur 1093 lors de la mise à jour d'une table à l'aide d'une sous-requête ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-22 00:11:23619parcourir

Why Does MySQL Throw Error 1093 When Updating a Table Using a Subquery?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn