2010-11-12 26 views
1

Imaginez que j'ai table1 qui a une colonne nommée 'nom_table'. J'utilise table1 .table_name pour stocker le nom d'une autre table dans la base de données. Les tables référencables auraient toutes un champ 'target_id.SQL: Comment pouvons-nous faire une table1 joindre table2 sur une table donnée dans un champ dans la table1?

Est-il possible d'utiliser table_name dans une instruction JOIN?

Par exemple:

SELECT t1.*, t2.* FROM table1 AS t1 
        JOIN table1.table_name AS t2 ON t1.table1_id = t2.target_id 

La solution évidente est d'utiliser pour obtenir le nom de la table d'abord le script (C++ dans mon cas), et de construire une requête SQL de celui-ci. La question est: pouvons-nous contourner le script et le faire directement en SQL (MySQL)?

Edit: What is dynamic SQL?

+2

C'est une situation où SQL dynamique est la voie à suivre. – Gabe

+0

Merci. Je n'ai jamais entendu parler de 'SQL dynamique'. Laissez-moi trouver où j'ai placé mon google et je vais jeter un oeil ... – augustin

+0

@Gabe: Notez que je travaille avec mysql. Est-ce une extension spécifique au fournisseur? – augustin

Répondre

2

La seule chance que vous avez à faire est de 2 instructions SQL:

  • sélectionnez le nom de table dont vous avez besoin
  • utiliser cette tablename pour construire dynamiquement la requête pour obtenir secound les données dont vous avez besoin - ce que vous voulez n'est pas possible avec SQL directement (et il semble que vous ayez mal conçu votre base de données d'une façon ou d'une autre - mais c'est difficile à dire sans savoir quel est l'objectif).
+0

Merci. Comment traduiriez-vous ma requête dans les 2 sql dont vous parlez? – augustin

+0

Fondamentalement, vous devez construire une chaîne, puis l'exécuter en tant que requête SQL, ce que vous ne pouvez pas faire à partir de SQL. Vous avez besoin de quelque chose qui se trouve en dehors de SQL exécuter la requête. Cela pourrait être quelque chose d'aussi simple que le client mysql. – eaolson