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

Comment puis-je corriger l'erreur MySQL 1093 : « Impossible de spécifier la table cible pour la mise à jour dans la clause FROM » ?

Susan Sarandon
Libérer: 2024-12-23 16:11:11
original
844 Les gens l'ont consulté

How Can I Fix MySQL Error 1093:

Surmonter l'erreur MySQL 1093 : mise à jour des tables spécifiées dans la clause FROM

L'erreur MySQL 1093 se produit lors de la tentative de mise à jour d'une table également utilisée dans la clause FROM de la même requête. Pour résoudre cette erreur, envisagez les approches suivantes :

Joindre la table à elle-même

Si possible, joignez la table à elle-même en utilisant des critères de sélection appropriés. Cela permet à MySQL de visualiser la table en tant qu'entités distinctes et permet des modifications destructives :

UPDATE tbl AS a
INNER JOIN tbl AS b ON ....
SET a.col = b.col
Copier après la connexion

Imbriquer la sous-requête plus profondément dans la clause FROM

Comme alternative, imbriquer la sous-requête plus profondément dans la clause FROM pour créer une table temporaire implicite :

UPDATE tbl SET col = (
  SELECT ... FROM (SELECT.... FROM) AS x);
Copier après la connexion

Cependant, cette méthode est moins efficace et peut ne pas être optimisé correctement par l'optimiseur de requêtes de MySQL dans certaines versions.

Désactivation de l'optimiseur de requêtes

Dans les versions MySQL 5.7.6 et supérieures, l'optimiseur peut empêcher la sous-requête stratégie. Pour désactiver temporairement l'optimisation, définissez la variable optimiseur_switch :

SET optimizer_switch = 'derived_merge=off';
Copier après la connexion

Exemple de requête de suppression

Pour répondre à la requête spécifique fournie dans la question, joignez la table story_category à la table des catégories pour identifier et supprimer les entrées corrompues :

DELETE t1
FROM story_category AS t1
INNER JOIN category AS t2
ON t1.category_id = t2.id
WHERE t2.id IS NULL;
Copier après la connexion

En conclusion, en employant ces techniques, vous pouvez surmonter le Erreur « Impossible de spécifier la table cible pour la mise à jour dans la clause FROM » et effectuez les modifications nécessaires aux tables de votre 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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal