Maison >base de données >tutoriel mysql >Comment résoudre l'erreur MySQL 1093 : « Vous ne pouvez pas spécifier la table cible 'nom_table' pour la mise à jour dans la clause FROM » ?

Comment résoudre l'erreur MySQL 1093 : « Vous ne pouvez pas spécifier la table cible 'nom_table' pour la mise à jour dans la clause FROM » ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-24 15:12:15631parcourir

How to Solve MySQL Error 1093:

Erreur MySQL 1093 : comprendre et surmonter la restriction

Dans MySQL, tente de modifier une table qui est également référencée dans la clause FROM de la même requête peut entraîner l'erreur : "Vous ne pouvez pas spécifier la table cible 'nom_table' pour la mise à jour dans la clause FROM." Cette restriction découle de l'incapacité de MySQL à effectuer de telles opérations directement.

Pour résoudre ce problème, plusieurs approches peuvent être envisagées :

Joindre la table à elle-même

Une option consiste à joindre la table à elle-même avec des critères de sélection appropriés, créant ainsi deux instances distinctes de la table du point de vue de MySQL. Cela permet d'effectuer des opérations destructrices sur une instance tout en laissant l'autre intacte.

Imbrication de sous-requêtes dans la clause FROM

Une solution alternative consiste à imbriquer la sous-requête qui génère la cible lignes à supprimer dans une clause FROM plus profonde. Cela crée une table temporaire implicite à partir de la sous-requête, que MySQL reconnaît comme une entité distincte de la table cible. Cependant, cette approche peut avoir un impact sur les performances.

Désactivation de l'optimisation de l'optimiseur (MySQL 5.7.6 et versions ultérieures)

À partir de MySQL 5.7.6, l'optimiseur peut optimiser le sous-requête dans la clause FROM, provoquant la persistance de l'erreur. Pour surmonter ce problème, désactivez l'optimisation à l'aide de la variable optimiseur_switch :

SET optimizer_switch = 'derived_merge=off';

Notez que ceci est recommandé comme solution à court terme ou pour de petites tâches ponctuelles, car cela peut avoir un impact négatif sur les performances globales des requêtes.

Conclusion

L'erreur "Vous ne pouvez pas spécifier la table cible 'nom_table' pour la mise à jour dans la clause FROM" découle de la limitation de MySQL dans la modification d'une table qui est également utilisée dans la clause FROM. En employant les méthodes décrites ci-dessus, les développeurs peuvent surmonter cette restriction et effectuer les opérations souhaitées sur leurs données.

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