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!