update donation,blood_supply
set amount_by_type = (amount_by_type + blood_amount)
where donation.blood_type = blood_supply.blood_type;
和第二张表 血液供应 ( blood_type varchar(45), amount_by_type float )
我的表看起来像这样
我希望通过血型来存储所有捐赠的全部血液。
所以现在我尝试根据blood_type对捐赠表中的值进行求和,并使用以下方法将它们存储到blood_supply表中:
{{1}}
但它并没有正确地计算blood_amount。
我得到了这个
在血液供应表中得到A = 0.8,B = 0.4,0 = 0.9
答案 0 :(得分:0)
在加入和更新右表之前,您可能需要首先聚合左表。
update (select sum(blood_amount) blood_amount,
blood_type
from donation
group by blood_type) dt,
blood_supply bs
set bs.amount_by_type = dt.blood_amount
where bs.blood_type = dt.blood_type
希望它可以提供帮助
答案 1 :(得分:0)
你寻找的是一种观点。每次修改另一个表中的数据时更新一个表是不切实际的。
我的回答是:
create view blood_supply as select sum(blood_amount) as blood_amount, blood_type
from donation group by blood_type
在此之后,blook_supply可以像任何其他表一样进行处理,但是会在捐赠更改时更新值。变更意味着新的捐赠,现有的更新或删除。