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

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

Barbara Streisand
Libérer: 2024-12-17 06:12:24
original
358 Les gens l'ont consulté

How to Resolve MySQL Error 1093:

Surmonter l'erreur MySQL 1093 : "Impossible de spécifier la table cible pour la mise à jour dans la clause FROM"

Lorsque vous rencontrez l'erreur MySQL 1093, il est important pour comprendre le problème sous-jacent. Cette erreur se produit lors de la tentative de modification d'une table qui est également référencée dans la clause FROM d'une requête.

Cause première

MySQL ne permet pas la modification simultanée des tables et utilisé dans la clause FROM d'une instruction UPDATE ou DELETE. Cette restriction est due à l'ambiguïté qui découlerait de l'accès à la même table pour les deux opérations.

Solution 1 : Utiliser une sous-requête

Une solution de contournement consiste à intégrer le SELECT instruction qui identifie les entrées corrompues en tant que sous-requête dans la clause FROM de UPDATE ou DELETE déclaration :

UPDATE story_category SET category_id = NULL
WHERE category_id NOT IN (
    SELECT DISTINCT category.id 
    FROM category 
      INNER JOIN story_category ON category_id=category.id
);
Copier après la connexion

Solution 2 : auto-rejoindre la table

Vous pouvez également vous auto-joindre la table pour créer des alias distincts pour la même table, ce qui permet vous de modifier l'un des alias tout en référençant l'autre. Par exemple :

UPDATE story_category AS updated
INNER JOIN story_category AS original
    ON updated.category_id = original.category_id
SET updated.category_id = NULL
WHERE original.category_id NOT IN (
    SELECT DISTINCT category.id 
    FROM category 
      INNER JOIN story_category ON category_id=category.id
);
Copier après la connexion

Éviter une réapparition

Une fois les entrées corrompues supprimées, envisagez d'implémenter des contraintes sur la table story_category pour éviter de futures entrées invalides :

ALTER TABLE story_category
ADD FOREIGN KEY (category_id) REFERENCES category(id);
Copier après la connexion

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