Допустим, у меня есть следующие таблицы отношений (с помощью ключей, существующих на обоих концах)SQL сумма() с несколькими уровня присоединяется
table a -> table b
table b -> table c
table c -> table d
table d -> table e
table e -> table f
И я хочу, чтобы группа по ключу на table a
и суммы() значения из table f
, как если бы обе таблицы были непосредственно соединены.
Проблема заключается в том, что если я сделаю это, информация будет дублироваться, так как все отношения из a -> b -> c -> d -> e -> f будут повторяться (как сказал Андомар: некоторая информация повторяется, поскольку существует несколько маршруты от А до F)
Есть ли способ обойти это, или это мой единственный выбор, чтобы создать среднюю таблицу, содержащую отношения table a
->table f
?
Детали:
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
Пример данных:
Doing объединения, отношения:
a b c value
1 2 2 20
1 3 2 20
1 4 2 20
Если я сумма(), я получу 60, но я хочу для получения 20
С благодарностью
Я думаю, нам понадобится дополнительная информация о структурах таблиц и ключах –
Редактировать: Я добавил деталь в вопрос. Вопрос не требует особого уровня детализации, вопрос относится ко всем наборам таблиц. Просто предположим, что таблица a связана с таблицей b через некоторый столбец, таблица b связана с таблицей c через другой столбец и т. Д. –
Что значит «информация будет дублироваться»? Какая информация? Если вы делаете внутренние соединения по пути, вы должны получить одну копию каждой общей строки между двумя таблицами. – BeemerGuy