Maison > Article > base de données > Comment corriger l'erreur « Table spécifiée deux fois » dans les requêtes MySQL UPDATE ?
Table spécifiée deux fois : résolution des conflits de mise à jour dans MySQL
Lors de la tentative de mise à jour d'une table qui apparaît à la fois comme cible de mise à jour et comme cible distincte source de données, MySQL peut générer l'erreur "La table 'nom_table' est spécifiée deux fois, à la fois comme cible pour 'UPDATE' et comme source distincte pour les données." Ce problème survient lorsque vous référencez la même table plusieurs fois dans votre requête.
Plus précisément, ce message d'erreur indique que la table du gestionnaire est utilisée à la fois comme table cible pour l'opération UPDATE et comme source de données pour la sélection. données de la table branch_master. Cette double référence peut confondre MySQL.
Solution
La solution consiste à isoler la table de votre source de données dans une table dérivée, qui est une table temporaire créée sur le fly pour contenir les données de la table d'origine. En faisant cela, vous pouvez éviter toute ambiguïté dans votre requête.
Remplacez la ligne suivante dans votre requête :
FROM manager AS m2
par :
FROM (select * from manager) AS m2
Cela créera un table dérivée appelée m2 qui contient toutes les données de la table du gestionnaire d'origine.
Requête mise à jour
Voici la requête mise à jour qui résoudra l'erreur de conflit de table :
UPDATE manager SET status = 'Y' WHERE branch_id IN ( select branch_id FROM (select * from manager) AS m2 WHERE (branch_id, year) IN ( SELECT branch_id, year FROM branch_master WHERE type = 'finance' ) );
En utilisant une table dérivée, vous pouvez vous assurer que la table du gestionnaire n'est référencée qu'une seule fois dans votre requête, empêchant MySQL de rencontrer l'erreur « Table spécifiée deux fois ».
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!