Disons que j'ai les relations tableau ci-dessous (via les clés existantes sur les deux extrémités)valeurs somme SQL() avec plusieurs niveaux rejoint
table a -> table b
table b -> table c
table c -> table d
table d -> table e
table e -> table f
Et je veux groupe par une clé sur table a
et somme() de table f
comme si les deux tables étaient directement jointes. Le problème est que si je fais cela, l'information sera dupliquée car toutes les relations d'un -> b -> c -> d -> e -> f se répéteront (comme Andomar a dit: certaines informations se répètent parce qu'il y a plusieurs routes de A à F)
Y at-il un moyen de contourner cela, ou est mon seul choix pour créer une table du milieu contenant la relation table a
->table f
?
Détails:
Table a
id1 | id2
Table b
id2 | id3
Table c
id3 | value
select a.id1, sum(value) from a
inner join b on a.id2 = b.id2
inner join c on b.id3 = c.id3
group by a.id1
exemple des données:
Faire la jonction, la relation est:
a b c value
1 2 2 20
1 3 2 20
1 4 2 20
Si je fais la somme(), je vais obtenir 60 mais je veux pour obtenir 20
Merci
Je pense que nous aurons besoin de plus d'informations sur les structures et les clés de la table –
Modifier: J'ai ajouté un détail dans la question. La question ne nécessite pas vraiment ce niveau de détail, la question s'applique à tous les ensembles de tables. Supposons simplement que la table a est liée à la table b via une colonne, la table b est liée à la table c via une autre colonne, etc. –
Que voulez-vous dire par "l'information sera dupliquée"? Quelle information? Si vous faites des jointures internes le long du chemin, vous devriez obtenir une copie unique de chaque ligne commune entre chaque deux tables. – BeemerGuy