计算列中多行的值,从一个表到另一个表

时间:2015-06-27 10:48:05

标签: mysql

我有两张桌子"机会"和"项目"。 每个机会都是独特的。 "项目"和"机会"通过" opportunityid"连接。因此可以有一个机会"连接到多个"项目" " opportunties"有两个柱子:"机会"和"潜力"。 " opportuntiesid"是"机会"的唯一ID。 "项目"有三个列:" itemsid"这是项目的唯一ID。 " opportuntiesid"这是来自机会的身份。将物品与机会联系起来。并且"价值"它包含一个整数值。

我想要的是以下内容: 填补"潜力"来自"机会"用"值"来自" items"基于" opportunityid"。

我尝试了什么:

update opportunities,items
set  opportunties.potential = opportunties.potential + items.value
where  opportunties.opportunitiesid=items.opportuntiesid;

这只会使用第一项中的项目值填充opportunity.potential。

然后我尝试分两步完成:  第一:

update opportunities,items
set  opportunties.potential = opportunties.potential + items.value
where  opportunties.opportunitiesid=items.opportuntiesid;

然后:

update opportunities,items
set  opportunties.potential = opportunties.potential + items.value
where  opportunties.opportunitiesid=items.opportuntiesid 
and where opportunties.potential != items.value;

这不起作用,因为有些项具有相同的值。

我不明白为什么我的更新不起作用。

如果还不清楚,请告诉我。

提前致谢,

史蒂芬

1 个答案:

答案 0 :(得分:0)

我想你想要从项目中加总所有值,然后将其添加到opportunity.potential,因为其他东西没有意义 - 如果一个机会X有很多项目(例如1,2,3),那么如何可以使用多个值更新一个机会的​​潜力?
只有一笔钱才对我有意义。



如果我是对的,那么尝试依赖(相关)子查询:

update opportunities
    set  opportunties.potential = opportunties.potential + (
        SELECT SUM ( items.value ) FROM items
        WHERE  opportunties.opportunitiesid=items.opportuntiesid
    );


和一个多表格版本 - 在MySql上这个可能会比上面的更快,因为MySql(我知道)不知道如何通过将它们重写为连接来优化依赖子查询,尤其是在更新中

UPDATE opportunities,
  (
     SELECT opportunitiesid, SUM( value ) as val
     FROM items
     GROUP BY opportunitiesid
) x
SET opportunities = opportunities + x.val
WHERE x.opportunitiesid = opportunities.opportunitiesid