Mysql - 构建不同表的值之和

时间:2015-03-18 05:46:50

标签: mysql outer-join

假设我们有两个表taba和tabb

CREATE TABLE `taba` (
  `id` INT NOT NULL,
  `value` FLOAT NULL,
  PRIMARY KEY (`id`));

CREATE TABLE `tabb` (
  `id` INT NOT NULL,
  `value` FLOAT NULL,
  PRIMARY KEY (`id`));

我想使用适用于任何星座的查询来构建相同ID的总和。这通常是指MySql中缺少的FULL OUTER JOIN问题,需要使用UNION解决方法来解决

CREATE OR REPLACE VIEW `sum` AS 
SELECT a.id, a.`value` + COALESCE(b.`value`,0) AS `mysum` 
FROM taba a 
LEFT JOIN tabb b ON a.id=b.id 
UNION
SELECT b.id, COALESCE(a.`value`,0) + b.`value` AS `mysum` 
FROM tabb b 
LEFT JOIN taba a ON a.id=b.id

让我们以简短的形式注意到这一点

taba + tabb

是否有一个通常有两个以上加数的烹饪容器,即

taba + tabb + tabc

还是我必须以“虚拟括号”的方式解决它?

(taba + tabb) + tabc

或者是否有更好的方法可以获得无数的加数?

编辑:一个想法可能是跳过UNION构造并使用'something'(子查询?),它提供所有ID的联合集,0作为第一个summand的值AS。在这种情况下,COALESCE和LEFT JOIN就足够了。

子查询不能处理MySql中的视图,但这可以解决。

1 个答案:

答案 0 :(得分:2)

为什么不

select id,sum(value)
from (
select id, value from taba
union all
select id, value from tabb) t
group by id

如果您有多个表可以选择相同的格式,只需将它们放在子句中并使用union all将它们组合在一起。