2009-05-22 10 views
10

J'essaye de construire une requête dynamique dans MYSQL pour rejoindre une table dont le nom est stocké comme valeur de champ sur une autre table comme ceci:MYSQL rejoindre une table dont le nom est stocké comme une valeur de champ sur une autre table

SELECT * FROM CATEGORIES 
INNER JOIN CATEGORISATIONS ON CATEGORISATIONS.id = CATEGORIES.fk_categorisation 
INNER JOIN [CATEGORISATIONS.nom_table] LV_REGIONS ON LV_REGIONS.id = CATEGORIES.valeur 

Une réponse ?!

+0

L'utilisation de ce champ est que CATEGORISATIONS.nom_table peut se référer à une quelconque de la table de tout schéma sans créer une table d'association entre chacun d'eux. – Cedric

Répondre

1

Je vais supposer que vous essayez d'obtenir "[CATEGORISATIONS.nom_table]" pour résoudre un nom de table.

Dans ce cas, vous pouvez essayer d'utiliser une sous-requête qui résoudra uniquement 1 nom de table (donc un jeu de résultats avec 1 ligne et 1 colonne). Je ne suis pas sûr que MySQL accepte un nom de chaîne pour une table, mais ça vaut le coup d'essayer.

2

Ma première recommandation est de trouver celui qui a conçu ce schéma et de lui donner un bon livre sur la conception de bases de données relationnelles. De là, vous pouvez diriger l'une des deux directions: La première consiste à annuler le désordre que vous avez dans le schéma en chargeant les tables séparées nommées par CATEGORIZATIONS.nom_table dans une seule table REGIONS sur laquelle vous pouvez interroger directement.

Vous pouvez également diviser cette requête en plusieurs parties, en utilisant le résultat de la première INNER JOIN pour construire une requête UNION pour effectuer la seconde INNER JOIN.

1

Peut-être le gars qui a fait cela savait que c'est vraiment pas une bonne pratique de conception ... mais parfois vous devez faire pirater merdique faire ce que vous voulez faire ...

De ce que je sais le sujet, je ne pense pas que vous pouvez y parvenir avec seulement une requête SELECT.

Peut-être avec une procédure stockée ...

1

J'ai essayé d'utiliser des valeurs de table de MySQL sont retournés à partir d'un sous-requête en tant que noms de champs avant et n'a pas réussi. Je ne pourrais jamais obtenir mysql pour accepter une valeur de jeu d'enregistrements en tant que nom de champ. J'ai dû utiliser PHP pour accomplir cette tâche, malheureusement.

+1

C'est ce que je ferai jusqu'à ce qu'un jour quelqu'un me montre un moyen de faire dans une requête mysql. – Cedric

Questions connexes