我有两张桌子“机会”和“物品”。每一个机会都是独一无二的。“项目”和“机会”是通过“时机”联系起来的。因此,一个“机会”能否与多个“项目”“机会”联系起来,有两个专栏:“机会”和“潜力”。“机会主义”是“机会”的独特特征。" items“有三列:"itemsid”,它是项的唯一id。“机会主义”,这是从机会的本质。把项目和机会联系起来。和包含整数值的" value“。
我想要的是:在“时机”的基础上,用“项目”中的“价值”填充“机会”中的“潜力”。
我试过的是:
update opportunities,items
set opportunties.potential = opportunties.potential + items.value
where opportunties.opportunitiesid=items.opportuntiesid;这只会用来自第一个项的项值填充opportunities.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;这不起作用,因为有些项目具有相同的值。
我不明白为什么我的更新不起作用。
如果还有什么不清楚的地方请告诉我。
提前谢谢你,
史蒂文
发布于 2015-06-27 12:32:16
我想您想要将来自项的所有值加在一起,然后添加到opportunities.potential中,因为其他的东西没有意义--如果一个机会X有许多项(例如,1、2、3),那么如何用多个值来更新 one opportunity的潜力呢?
对我来说只有一笔钱才有意义。
如果我是对的,那么尝试一个从属(相关)子查询:
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.opportunitiesidhttps://stackoverflow.com/questions/31087884
复制相似问题