Erreur MySQL : table spécifiée deux fois
Lorsque vous tentez de mettre à jour une table tout en l'utilisant également comme source de données, MySQL peut émettre une erreur indiquant que la table est spécifiée deux fois. Cela se produit généralement lors de l'utilisation de sous-requêtes avec alias de table.
Par exemple, considérons la requête suivante :
UPDATE manager AS m1 SET m1.status = 'Y' WHERE m1.branch_id IN ( SELECT m2.branch_id FROM manager AS m2 WHERE (m2.branch_id, m2.year) IN ( SELECT DISTINCT branch_id, year FROM branch_master WHERE type = 'finance' ) );
Cette requête tente de mettre à jour la table du gestionnaire en fonction d'une sous-requête qui vérifie si certains champs dans le gestionnaire, faites correspondre les valeurs de la table branch_master où le type est « finance ». Cependant, MySQL s'oppose au fait que la table du gestionnaire soit utilisée à la fois comme cible (dans la clause UPDATE) et comme source de données (dans la sous-requête).
Pour résoudre ce problème et éviter que la "Table soit spécifié deux fois", nous pouvons utiliser une table dérivée pour la sous-requête. Cela implique de créer une table temporaire basée sur la table d'origine, puis de sélectionner dans cette table dérivée :
FROM (SELECT * FROM manager) AS m2
En mettant la table du gestionnaire d'origine entre parenthèses et en alias le résultat comme m2, nous créons une nouvelle table dérivée. Cela nous permet de sélectionner des données de la table du gestionnaire sans spécifier explicitement deux fois le nom du gestionnaire.
Requête mise à jour :
UPDATE manager SET status = 'Y' WHERE branch_id IN ( SELECT branch_id FROM (SELECT * FROM manager) AS m2 WHERE (m2.branch_id, m2.year) IN ( SELECT branch_id, year FROM branch_master WHERE type = 'finance' ) );
Cette requête mise à jour utilise correctement une table dérivée pour la sous-requête, résolvant le Erreur "La table est spécifiée deux fois" et permettant à la requête de s'exécuter avec succès.
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!