2009-05-22 18 views
10

Sto cercando di creare una query dinamica in MYSQL per unire una tabella il cui nome è memorizzato come valore di campo su un'altra tabella come questa:MYSQL si unisce a una tabella il cui nome è memorizzato come valore di campo su un'altra tabella

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 

Qualsiasi risposta ?!

+0

L'uso di questo campo è che CATEGORISATIONS.nom_table può riferirsi a qualsiasi della tabella di tutta schema senza creare una tabella di associazione tra ognuno di essi. – Cedric

risposta

1

Suppongo che tu stia cercando di ottenere "[CATEGORISATIONS.nom_table]" per risolvere il nome di una tabella.

In tal caso, è possibile provare a utilizzare una sottoquery in grado di risolvere solo un nome di tabella (quindi un set di risultati con 1 riga e 1 colonna). Non sono sicuro che MySQL accetterà un nome stringa per un tavolo, ma vale la pena provarlo.

2

La mia prima raccomandazione è di trovare chi ha progettato lo schema e dare loro un buon libro sulla progettazione di database relazionali.

Da lì, è possibile dirigersi in una delle due direzioni: La prima è annullare il disordine che si ha nello schema caricando le tabelle separate denominate da CATEGORIZATIONS.nom_table in una singola tabella REGIONS alla quale è possibile eseguire query direttamente.

In alternativa, è necessario suddividere quella query in più parti, utilizzando il risultato del primo INNER JOIN per creare una query UNION per eseguire il secondo JOIN INTERNO.

1

Forse il ragazzo che ha fatto questo era consapevole che non è davvero una buona pratica di progettazione ... ma a volte si deve fare di merda hack per fare quello che vuoi fare ...

Da quello che so su l'argomento, non penso che si possa ottenere ciò con una sola query SELECT.

magari con un proc memorizzato ...

1

ho cercato di utilizzare i valori della tabella di MySQL tornati da una subquery come nomi di campo prima e non ha avuto successo. Non potrei mai ottenere mysql per accettare un valore recordset come nome di campo. Ho dovuto usare php per realizzare questo compito, sfortunatamente.

+1

Questo è quello che farò finché un giorno qualcuno mi mostrerà un modo per farlo all'interno di una query mysql. – Cedric

Problemi correlati