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

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
Libérer: 2024-11-11 20:48:02
original
470 Les gens l'ont consulté

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'
  )
);
Copier après la connexion

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!

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal