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

Comment résoudre l'erreur « Vous ne pouvez pas spécifier la table cible pour la mise à jour dans la clause FROM » de MySQL ?

Patricia Arquette
Libérer: 2025-01-22 20:01:08
original
744 Les gens l'ont consulté

How to Solve MySQL's

Dépannage de l'erreur MySQL « Vous ne pouvez pas spécifier la table cible pour la mise à jour dans la clause FROM »

Le problème :

La rencontre de l'erreur « Vous ne pouvez pas spécifier la table cible pour la mise à jour dans la clause FROM » lors d'une instruction MySQL UPDATE ciblant une table (par exemple, pers) indique une limitation dans le traitement des requêtes de MySQL.

Exemple de scénario :

Disons que vous avez la UPDATE requête suivante :

<code class="language-sql">UPDATE pers P
SET P.gehalt = P.gehalt * 1.05
WHERE (P.chefID IS NOT NULL OR gehalt < ... ); </code>
Copier après la connexion

Cette requête tente de mettre à jour la colonne gehalt dans la table pers en fonction de conditions impliquant la même table pers, provoquant l'erreur.

Pourquoi cela se produit :

La restriction MySQL empêche les mises à jour ambiguës où la clause FROM pourrait conduire à des modifications involontaires.

La solution :

La solution de contournement consiste à créer un alias temporaire de la table à l'aide d'une sous-requête :

<code class="language-sql">UPDATE pers P
SET P.gehalt = (SELECT T.gehalt * 1.05 FROM (SELECT * FROM pers) AS T WHERE T.persID = P.persID)
WHERE (P.chefID IS NOT NULL OR P.gehalt < ...);</code>
Copier après la connexion

Cette requête révisée évite la référence directe à pers dans l'instruction UPDATE elle-même. La sous-requête (SELECT * FROM pers) AS T crée un alias de table temporaire T, permettant à l'instruction UPDATE de référencer les données nécessaires sans violer la règle de MySQL.

Remarque importante :

Bien que l'utilisation de SELECT * simplifie l'exemple, pour des performances optimales, sélectionnez uniquement les colonnes requises dans la table pers de la sous-requête. Incluez toujours une clause WHERE pertinente dans votre sous-requête pour garantir une récupération efficace des données. Dans l'exemple ci-dessus, WHERE T.persID = P.persID est crucial pour faire correspondre correctement les lignes entre l'instruction UPDATE principale et la sous-requête.

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