Erreur : table spécifiée deux fois dans la requête MySQL
Dans MySQL, lorsque vous tentez de mettre à jour une table tout en l'utilisant simultanément comme source de données dans la même requête, l'erreur « La table 'm1' est spécifiée deux fois, à la fois comme cible pour 'UPDATE' et comme source distincte de données" peut survenir. Cette erreur provient des limitations de MySQL dans la gestion de telles requêtes.
Pour résoudre ce problème, au lieu d'utiliser l'alias de la table directement dans la sous-requête, MySQL demande aux utilisateurs de faire une sélection dans une table dérivée. Cela implique de créer une table temporaire basée sur la table d'origine et de référencer la table dérivée dans la sous-requête.
Requête révisée :
Voici une version révisée de la requête qui utilise une table dérivée pour contourner l'erreur :
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 sélectionnant dans la table dérivée (indiquée par "(SELECT * FROM manager) AS m2"), la requête évite l'ambiguïté qui a provoqué l'erreur précédente. La table dérivée agit comme une source de données indépendante, permettant à la requête de référencer la table à la fois comme cible pour la mise à jour et comme source de données pour 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!