2009-11-11 6 views
2

J'ai une base de données relationnelle avec trois tables. Le premier contient des ID qui se rapportent à la seconde. La seconde contient des id qui se rapportent à la troisième. Le troisième contient les résultats que je suis après.mysql - requête trois tables

Est-il possible avec une seule requête d'interroger un ID dans la première table qui donne tous les résultats de la troisième table qui s'y rapportent? Désolé, je suis nouveau sur mySQL.

+0

Si vous donnez une structure de table, nous pouvons vous donner une réponse plus précise. – CSharpAtl

Répondre

9

Mysql Join

Essayez cette

select * from table1 t1 
join table2 t2 on t1.t2ref = t2.id 
join table3 t3 on t2.t3ref = t3.id 

Ajouter une clause where pour rechercher certaines lignes dans le tableau 1

where t1.field = 'value' 
2

Utilisez la commande JOIN pour lier vos tables à oneantother.

En outre, je recommande this tutorial par Keith Brown.

4

oui

SELECT t3.* 
    FROM t1, t2, t3 
    WHERE t1.id = t2.id 
    AND t2.otherid = t3.id 
    AND t1.id = XXXX 
+0

Merci ... Je l'ai essayé et ça a fonctionné parfaitement ... J'ai aussi essayé l'approche de Peter Lindqvist (en utilisant des jointures). J'ai entendu JOIN sont chers. Votre solution est ressortie à 0,0004 seconde et à 0,0005 seconde. Pour le moment, j'ai très peu de données. Qui est susceptible d'être plus efficace? – Mark

+0

l'optimiseur de requête mysql transformera également cette requête en une jointure – knittl

+0

Je pense que la différence que vous rencontrez n'est pas significative. Si vous obtenez des requêtes lentes, vous devez examiner votre structure d'index. Se joint à 3 tables et l'indexation correcte ne sera normalement pas lente. –

3

vous souhaitez utiliser une jointure:

SELECT `t3`.`id` 
    FROM `table3` `t3` 
LEFT JOIN `table2` `t2` 
     ON `t3`.`foreign_id` = `t2`.`id` 
LEFT JOIN `table1` `t1` 
     ON `t2`.`foreign_id` = `t1`.`id` 
    WHERE `t1`.`id` = 'some_id'