我有两张桌子"机会"和"项目"。 每个机会都是独特的。 "项目"和"机会"通过" 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;
这不起作用,因为有些项具有相同的值。
我不明白为什么我的更新不起作用。
如果还不清楚,请告诉我。
提前致谢,
史蒂芬
答案 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