Maison  >  Article  >  base de données  >  Comment résoudre l'erreur MySQL « Table spécifiée deux fois » lors de la mise à jour et de l'interrogation de la même table ?

Comment résoudre l'erreur MySQL « Table spécifiée deux fois » lors de la mise à jour et de l'interrogation de la même table ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-11 20:48:02453parcourir

How to Resolve MySQL Error

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!

Déclaration:
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