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
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);
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';
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;
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!