假设我有以下表格关系(通过两端存在的密钥)
table a -> table b
table b -> table c
table c -> table d
table d -> table e
table e -> table f
我希望按table a
上的键和来自table f
的sum()值进行分组,就好像两个表都是直接连接一样。
问题在于,如果我这样做,信息将被复制为来自 - >的所有关系。 b - > c - > d - > e - > f将重复(正如Andomar所说:一些信息重复,因为从A到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
数据示例:
进行加入,关系是:
a b c value
1 2 2 20
1 3 2 20
1 4 2 20
如果我做总和(),我会得到60但我想得到20
由于
答案 0 :(得分:1)
我假设某些信息重复,因为从A到F有多条路由。如果F中有唯一键,您可以使用子查询取消复制路径:
SELECT SubQuery.AValue, sum(SubQuery.FValue)
FROM (
SELECT a.value as AValue, f.key, f.value as FValue
FROM a
INNER JOIN b ON b.key = a.key
INNER JOIN c ON c.key = b.key
INNER JOIN d ON d.key = c.key
INNER JOIN e ON e.key = d.key
INNER JOIN f ON f.key = e.key
GROUP BY a.value, f.key, f.value
) as SubQuery
GROUP BY SubQuery.AValue
子查询确保F中的每一行只计算一次。