我有三张桌子:
产品(pid,pname,pbrand,pprice)
ShoppingCart(cartid,cid,active,totalprice) ShoppingCart.cid引用Customer.cid
CartItem(cartid,pid,iprice,iquantity) CartItem.cartid引用ShoppingCart.cartid,CartId.pid引用Product.pid
如果表产品中的产品价格更新,则应首先更新包含该产品的所有购物车(CartItem),然后更新相关购物车中计算的总价。
我可以完成第一部分,我希望第二个任务可以像
一样工作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'"
答案 0 :(得分:0)
您可以像这样更新多个表
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;