gpt4 book ai didi

mysql - 如何创建触发器来更新从另一个更新表计算的列

转载 作者:行者123 更新时间:2023-11-29 21:09:43 25 4
gpt4 key购买 nike

我有三个表:

产品(pid、pname、pbrand、pprice)

购物车(cartid、cid、活跃、总价)ShoppingCart.cid 引用 Customer.cid

CartItem(cartid、pid、iprice、iquantity)CartItem.cartid引用ShoppingCart.cartid,CartId.pid引用Product.pid

如果Table Product中的产品价格更新,应该首先更新包含该产品的所有购物车(CartItem),然后更新相关购物车中计算的totalprice。

我可以完成第一部分,我希望第二部分可以像

delimiter //

create trigger update_prodprice after update on product
for each row
begin
update cartitem set iprice=new.pprice where pid=new.pid
and cartid in (select cartid from shoppingcart where active=True);

update shoppingcart set totalprice=sum(cartitem.iprice*cartitem.iquantity)
where active=True and cartid=cartitem.cartid;

end //

delimiter ;

但是第二次更新不起作用,因为

"ERROR 1054 (42S22): Unknown column 'cartitem.cartid' in 'where clause'"

最佳答案

您可以像这样更新多个表

update shoppingcart s, cartitem c 
set c.iprice = new.pprice,
s.totalprice = c.iprice*c.iquantity
where s.active=True and s.cartid=c.cartid
and c.pid = new.pid;

但是您必须弄清楚如何更新总价,因为购物车可以有多个商品,可能是这样的

update shoppingcart s, cartitem c 
set c.iprice = new.pprice,
s.totalprice = s.totalprice - old.pprice*c.iquantity + new.pprice*c.iquantity
where s.active=True and s.cartid=c.cartid
and c.pid = new.pid;

sqlfiddle

关于mysql - 如何创建触发器来更新从另一个更新表计算的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36488601/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com