Let’s say I have the following table relationships (via keys existing on both ends)
table a -> table b
table b -> table c
table c -> table d
table d -> table e
table e -> table f
And I want to group by a key on table a and sum() values from table f as if both tables were directly joined.
Problem is that if I do that, information will be duplicated as all relationships from a -> b -> c -> d -> e -> f will repeat (as Andomar said: some information repeats because there are multiple routes from A to F)
Is there a way around that, or is my only choice to create a middle table containing the table a -> table f relationship?
Details:
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
Data example:
Doing the join, the relationship is:
a b c value
1 2 2 20
1 3 2 20
1 4 2 20
If I do the sum(), I will get 60 but I want to get 20
Thanks
I’m assuming that some information repeats because there are multiple routes from A to F. If there is a unique key in F, you can un-duplicate the routes using a subquery:
The subquery ensures each row in F is only counted once.