Maison > base de données > tutoriel mysql > Comment contourner l'erreur « Impossible de rouvrir la table » dans les tables temporaires MySQL ?

Comment contourner l'erreur « Impossible de rouvrir la table » dans les tables temporaires MySQL ?

Susan Sarandon
Libérer: 2024-11-19 03:05:03
original
204 Les gens l'ont consulté

How to Workaround the

S'attaquer à l'erreur « Impossible de rouvrir la table » dans MySQL

Dans le traitement des données, la possibilité d'utiliser une table plusieurs fois dans une requête complexe est souvent essentielle. Cependant, lorsque vous travaillez avec des tables temporaires dans MySQL, cette opération apparemment basique rencontre l'erreur frustrante "Impossible de rouvrir la table".

Contexte

Comme décrit par Kris, une requête complexe impliquant plusieurs INNER JOINS sur une table temporaire entraîne l'erreur. Cela se produit car MySQL n'autorise pas l'ouverture de tables temporaires plusieurs fois dans la même requête.

Solution de contournement

Pour contourner cette limitation, une solution simple mais efficace consiste à dupliquez la table temporaire, créant essentiellement deux versions identiques. Cela fonctionne particulièrement bien lorsque la table temporaire est relativement petite, comme c'est souvent le cas.

Mise en œuvre

Les étapes suivantes décrivent la mise en œuvre de cette solution de contournement :

  1. Créez la table temporaire :
CREATE TEMPORARY TABLE search (baseID INT, condition TEXT);
Copier après la connexion
  1. Remplissez le table temporaire avec des données :
INSERT INTO search (baseID, condition) VALUES (1, 'condition1'), (1, 'condition2'), ...;
Copier après la connexion
  1. Maintenant, dupliquez la table temporaire :
CREATE TEMPORARY TABLE search_copy AS SELECT * FROM search;
Copier après la connexion
  1. Vous pouvez maintenant utiliser la table dupliquée comme autant de fois que nécessaire dans votre complexe requête :
SELECT
  *
FROM search
INNER JOIN search_copy f1 ON f1.baseID = search.baseID AND f1.condition = condition1
INNER JOIN search_copy f2 ON f2.baseID = search.baseID AND f2.condition = condition2
...
INNER JOIN search_copy fN ON fN.baseID = search.baseID AND fN.condition = conditionN;
Copier après la connexion

Avantages

Cette solution de contournement offre plusieurs avantages :

  • Simplicité : C’est simple à mettre en œuvre, même pour les juniors développeurs.
  • Efficacité :Il élimine l'erreur "Impossible de rouvrir la table", permettant des requêtes complexes avec des tables temporaires.
  • Efficacité de l'espace : La duplication de la table temporaire ne consomme pas d'espace disque supplémentaire sur le serveur.

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