2016-04-07 32 views
0

计算列:如何创建触发器来更新我有三个表从另一个更新表

产品(PID,PNAME,pbrand,pprice)

购物车(cartid,CID,活跃,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

可以更新这样

多个表
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; 

但你必须弄清楚如何更新总价,因为购物车可以有多个i TEMS也许这样的事情

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

相关问题