2010-01-21 4 views
0

nous avons 3 tableaux: grands-pères, pères, fils. Les grands-pères ont beaucoup de pères, et les pères ont beaucoup de fils, à travers les clefs grandfather_id et father_id. Chaque enregistrement n'a qu'une seule propriété, le nom de la personne. Ce que je veux est d'avoir une liste de tous les grands-pères, chacun avec un champ appelé petitsons_names qui est le csv de tous les noms de petits-fils. Les noms des pères n'apparaissent nulle part.SQLITE3 2 niveau rejoindre avec agrégation au niveau intermédiaire

Voici ma tentative de résoudre le problème:

SELECT grandfathers.*, group_concat(sons.name) 
FROM grandfathers 
    LEFT JOIN fathers ON grandfathers.id == fathers.grandfather_id 
    LEFT JOIN sons ON fathers.id == sons.father_id; 
problème est

.. un seul grand-père apparaît parce que l'agrégation se produit au mauvais endroit .. comment résoudre ce problème?

merci

+2

N'y a-t-il pas une clause GROUP BY dans cet exemple de code? –

+0

Pourquoi avez-vous (quelqu'un) voté par cette question? C'est bien exprimé, je pense, et pertinent. Si vous pensez que c'était trop facile, c'est votre problème, je ne connaissais pas la réponse et cela m'a été très utile. – luca

Répondre

1

Avez-vous essayé comme ça?

SELECT grandfathers.*, group_concat(sons.name) 
FROM grandfathers 
LEFT JOIN fathers ON grandfathers.id = fathers.grandfather_id 
LEFT JOIN sons ON fathers.id = sons.father_id 
GROUP BY grandfathers.id; 
Questions connexes