顧客 (cid、cname、caddress、ccity、cstate、czip、ccardnum) 製品 (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 を参照します Order(oid, carid, time, payprice) Order.cartid は ShoppingCart.cartid への参照
特定の製品の価格が変更されたときに、そのアイテムを含むアクティブなショッピング カート内のこのアイテムの価格を更新し、これらのショッピング カートの合計価格も更新するトリガーを作成しますか?.
CREATE TRIGGER priceupdate 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='1');
UPDATE shoppingcart
SET totalprice =
(select sum(iprice*iquantity)
from cartitem WHERE cartid=new.cartid;
END;
上記のコードは、caritem の更新に使用されるショッピング カートを更新しているため、エラーが発生しました。
以下のコードを試してみると、問題なく動作しましたが、shoppingcart の合計価格を更新できません。誰かがショッピング カートの totalprice の更新を手伝ってくれます
CREATE TRIGGER priceupdate 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='1');
END;
注:MYSQLを使用しています
サンプル データ: http://www.sqlfiddle.com/#!2/8489e9/4/3