Maison >base de données >tutoriel mysql >Comment puis-je résoudre l'erreur MySQL 1093 : impossible de spécifier la table cible pour la mise à jour dans la clause FROM ?

Comment puis-je résoudre l'erreur MySQL 1093 : impossible de spécifier la table cible pour la mise à jour dans la clause FROM ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-17 10:59:26723parcourir

How Can I Resolve MySQL Error 1093: Can't Specify Target Table for Update in FROM Clause?

Erreur MySQL 1093 : Comprendre la restriction sur les mises à jour de table dans la clause FROM

L'erreur MySQL "Vous ne pouvez pas spécifier la table cible 'nom_table 'for update in FROM clause' se produit lors de la tentative de modification d'une table à partir de sa propre instruction SELECT. Cette restriction provient de l'incapacité de MySQL à mettre à jour et à référencer simultanément une table dans la même opération.

Résoudre l'erreur

Pour surmonter ce problème, envisagez les approches suivantes :

  • Joindre la table à elle-même :
    Réorganiser la requête à exécuter une auto-jointure sur la table, créant une table temporaire. Cela permet des mises à jour sur la table d'origine :
UPDATE story_category a
INNER JOIN story_category b ON a.category_id = b.category_id
SET a.category_id = ...
  • Imbrication plus profonde de la sous-requête :
    Imbriquer la sous-requête qui identifie les entrées corrompues dans une autre sous-requête, créer un temporaire implicite table :
UPDATE story_category
SET category_id = (
  SELECT id
  FROM (
    SELECT id
    FROM category
    EXCEPT
    SELECT DISTINCT category_id
    FROM story_category
  ) AS x
)
  • Désactivation de l'optimiseur de requête :
    Pour les versions MySQL 5.7.6 et ultérieures, l'optimiseur peut tenter de supprimer la sous-requête. Pour éviter cela, désactivez l'optimiseur_switch :
SET optimizer_switch = 'derived_merge=off';

Remarque : La désactivation de l'optimiseur de requêtes n'est pas une solution recommandée à long terme et ne doit être utilisée que comme solution temporaire. Envisagez les approches alternatives pour une maintenance plus efficace de la base de 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