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

时间:2016-04-07 22:52:36

标签: mysql database-trigger

我有三张桌子:

产品(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'"

1 个答案:

答案 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;

sqlfiddle