Maison > base de données > tutoriel mysql > le corps du texte

Vous ne pouvez pas spécifier la table cible 'nom_table' pour la mise à jour dans la clause FROM - Comment résoudre l'erreur MySQL : impossible de mettre à jour la table cible dans la clause FROM

PHPz
Libérer: 2023-10-05 10:25:13
original
1373 Les gens l'ont consulté

You can't specify target table 'table_name' for update in FROM clause - 如何解决MySQL报错:无法在FROM子句中更新目标表

Bonjour, ce qui suit est un article de 1 500 mots intitulé : Vous ne pouvez pas spécifier la table cible 'nom_table' pour la mise à jour dans la clause FROM - Comment résoudre l'erreur MySQL : Impossible de mettre à jour la table cible dans la clause FROM, code spécifique des exemples sont nécessaires.


Lors du développement de la base de données MySQL, nous rencontrons parfois le message d'erreur suivant : Vous ne pouvez pas spécifier la table cible 'nom_table' pour la mise à jour dans la clause FROM. Cette erreur se produit généralement lorsque nous utilisons une instruction UPDATE avec une sous-requête, en particulier lorsque la table cible qui doit être mise à jour est référencée dans la sous-requête.

Cet article présentera la cause de cette erreur et fournira des solutions et des exemples de code spécifiques.

Tout d'abord, regardons un exemple pour reproduire cette erreur :

UPDATE table_name
SET column_name = value
WHERE column_name IN (SELECT column_name FROM table_name WHERE condition);
Copier après la connexion

Dans le code ci-dessus, nous essayons de mettre à jour la table nommée nom_table tout en utilisant une sous-requête comme condition WHERE. Cependant, dans MySQL, la mise à jour de la table cible directement dans la clause FROM n'est pas autorisée.

La raison de cette erreur réside dans l'ordre d'exécution de MySQL pour les instructions UPDATE. La séquence d'exécution de MySQL consiste à obtenir d'abord les données de la clause FROM, puis à filtrer et à effectuer des opérations de mise à jour basées sur la condition WHERE. Puisque nous référençons la table cible qui doit être mise à jour dans la sous-requête, cela provoque un conflit car nous ne pouvons pas référencer la table cible lors de sa mise à jour.

Afin de résoudre ce problème, nous devons modifier le code. Voici plusieurs solutions courantes :

Solution 1 : utilisez INNER JOIN

UPDATE table_name
INNER JOIN (SELECT column_name FROM table_name WHERE condition) AS temp_table
ON table_name.column_name = temp_table.column_name
SET table_name.column_name = value;
Copier après la connexion

Dans le code ci-dessus, nous utilisons INNER JOIN pour connecter la table cible et l'ensemble de résultats de la sous-requête, et filtrer à travers la condition WHERE. De cette façon, nous pouvons référencer les résultats de la sous-requête pendant le processus de mise à jour sans message d'erreur.

Solution 2 : Utiliser une table temporaire

CREATE TEMPORARY TABLE temp_table
SELECT column_name FROM table_name WHERE condition;

UPDATE table_name
SET column_name = value
WHERE column_name IN (SELECT column_name FROM temp_table);
Copier après la connexion

Dans cette solution, nous stockons d'abord l'ensemble de résultats de la sous-requête dans une table temporaire, puis utilisons la table temporaire pour effectuer l'opération de mise à jour. De cette façon, vous évitez le problème de se référencer lors de la mise à jour de la table cible.

Solution 3 : Utiliser la sous-requête comme champ

UPDATE table_name
SET column_name = (
    SELECT column_name FROM table_name WHERE condition
)
WHERE column_name = value;
Copier après la connexion

Dans cette solution, nous mettons à jour la sous-requête comme valeur de champ. En utilisant une sous-requête comme champ dans l'instruction UPDATE, nous pouvons contourner les limitations liées à la mise à jour de la table cible directement dans la clause FROM.

Pour résumer, lorsque nous rencontrons le message d'erreur Vous ne pouvez pas spécifier la table cible 'nom_table' pour la mise à jour dans la clause FROM dans MySQL, cela signifie que nous avons référencé la table cible en cours de mise à jour dans l'instruction UPDATE. Afin de résoudre ce problème, nous pouvons utiliser INNER JOIN, une table temporaire, ou utiliser une sous-requête comme champ pour effectuer des opérations de mise à jour.

J'espère que les solutions et exemples de code ci-dessus vous aideront à résoudre ce problème d'erreur MySQL ! Si vous avez d'autres questions, n'hésitez pas à continuer à les poser.

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!

Étiquettes associées:
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!