有什么方法可以将MySQL中两个相似表的值相加?
例如,我有以下两个表:
表1:
id | field1 | field2 | ... | fieldN
1 | 5 | 6 | ... | 32
2 | 25 | 5 | ... | 2
...| ... | ... | ... | ...
N | 4 | 1 | ... | 30
表2:
id | field1 | field2 | ... | fieldN
1 | 4 | 5 | ... | 4
2 | 2 | 5 | ... | 3
...| ... | ... | ... | ...
N | 4 | 5 | ... | 0
我正在考虑在这些表上使用UNION ALL,因为这些表具有相同的字段,后跟每个字段GROUP BY上的SUM。
在第一个查询中我会得到:
id | field1 | field2 | ... | fieldN
1 | 5 | 6 | ... | 32
1 | 4 | 5 | ... | 4
2 | 25 | 5 | ... | 2
2 | 2 | 5 | ... | 3
...| ... | ... | ... | ...
N | 4 | 1 | ... | 30
N | 4 | 5 | ... | 0
......最后是SUM:
id | field1 | field2 | ... | fieldN
1 | 9 | 11 | ... | 38
2 | 27 | 10 | ... | 5
...| ... | ... | ... | ...
N | 8 | 6 | ... | 30
有另一种方法可以做到吗?
答案 0 :(得分:1)
以下是两个选择。
第一个是进行连接,假设它们具有相同的ID:
select t1.id, (t1.field1 + t2.field1) as Field1, . . .
from t1 join
t2
on t1.id = t2.id
当然,您可以将其更改为left outer join
,但是您必须在算术计算中处理NULL值。
第二个是你的方法:
select id, sum(field1) as Field1, . . .
from ((select t1.*
from t1
) union all
(select t2.*
from t2
)
) t
group by id
你所做的有点偏好。我倾向于认为join
会更好地优化(特别是使用正确的索引)。但是,如果两个表中的id组不同,则union all
更容易处理该情况。