Je suis actuellement occupé à mettre en œuvre une sorte de filtre pour lequel je dois générer une clause INNER JOIN pour chaque "tag" à filtrer.
Le problème est qu'après tout un tas de SQL, j'ai une table qui contient toutes les informations dont j'ai besoin pour faire ma sélection, mais j'en ai à nouveau besoin pour chaque INNER JOIN généré.
En gros, ça ressemble à ça :
SELECT
*
FROM search
INNER JOIN search f1 ON f1.baseID = search.baseID AND f1.condition = condition1
INNER JOIN search f2 ON f2.baseID = search.baseID AND f2.condition = condition2
...
INNER JOIN search fN ON fN.baseID = search.baseID AND fN.condition = conditionN
Cela fonctionne mais je préférerais de loin que la table de "recherche" soit temporaire (elle peut être plus petite de plusieurs ordres de grandeur si elle n'est pas une table normale) mais cela me donne une erreur très ennuyeuse : Can't reopen table
Quelques recherches m'amènent à ce rapport de bogue mais les gens de MySQL ne semblent pas se soucier du fait qu'une fonctionnalité aussi basique (utiliser une table plus d'une fois) ne fonctionne pas avec les tables temporaires. Je rencontre de nombreux problèmes d'évolutivité avec cette question.
Existe-t-il une solution de rechange viable qui ne m'oblige pas à gérer des tas de tables temporaires mais bien réelles ou à maintenir une énorme table avec toutes les données qu'elle contient ?
Cordialement, Kris
[supplémentaire]
La réponse GROUP_CONCAT ne fonctionne pas dans mon cas, car mes conditions sont des colonnes multiples dans un ordre spécifique, ce qui ferait des OU à partir de ce dont j'ai besoin pour être des ET. Cependant, elle m'a aidé à résoudre un problème antérieur, de sorte que la table, temporaire ou non, n'est plus nécessaire. Nous avions simplement une vision trop générique pour notre problème. L'ensemble de l'application des filtres a maintenant été ramené d'environ une minute à bien moins d'un quart de seconde.
7 votes
J'ai eu le même problème en utilisant une table temporaire deux fois dans la même requête en utilisant UNION.
0 votes
Je vais juste utiliser une vraie table alors.