我有2个表(import_size,export_size)都包含这2列(size_id,weight) 现在,我正在尝试获取每个表中每个大小的权重总和,我的查询看起来像这样
SELECT sum(i.weight) imports,sum(e.weight) exports,s.size
FROM size s
LEFT JOIN import_size i on s.id=i.size_id
LEFT JOIN export_size e on s.id=e.size_id
GROUP BY s.size
现在说例如在import_size表中,对于大小1,我们只有一条记录,但是对于相同大小的export_size表,我们有2条记录,import_size产生的权重之和乘以2,任何想法?
例如:
导入表有1条记录:
size_id 1 - weight 2
导出表有2条记录:
size_id 1 - weight 2
size_id 1 - weight 3
查询结果:
imports 4 - exports 5 - size 1
然而它应该是
imports 2 - exports 5 - size 1
答案 0 :(得分:1)
一般来说,连接为每个与条件匹配的排列创建一行。您正在加入3个表。你说的是,对于大小1,这些表有:
size
:1行import_size
:1行export_size
:2行这给了我们1 * 1 * 2 = 2个排列,这意味着我们得到2行。显然,每条记录都包含不同的export_size
记录,但size
和import_size
呢?这两行使用相同的记录。这意味着import_size.weight
出现两次 - 这就是为什么它总结了两次。
BTW - 如果两个表都有2个大小为1的条目,那么您将获得4个排列,并且导入和导出大小都将加倍。
解决方案:为每个表单独进行聚合,然后进行连接(未测试):
SELECT i.imports, e.exports, s.size
FROM size AS s
LEFT JOIN (SELECT size_id,sum(weight) AS imports FROM import_size GROUP BY size_id) AS i ON s.id=i.size_id
LEFT JOIN (SELECT size_id,sum(weight) AS exports FROM export_size GROUP BY size_id) AS e ON s.id=e.size_id