回答

收藏

计算另一列表中另一列的列值

技术问答 技术问答 230 人阅读 | 0 人回复 | 2023-09-14

我有一张桌子,包括商店里每件商品的单价和其他详细信息。1 m) v/ i5 j' s1 X9 }
CREATE TABLE Item (Item_id CHAR(4),Description CHAR(40),Sizes CHAR(40),Weight REAL,Unit_price REAL,PRIMARY KEY(Item_id));另一个包含每个订单中包含的项目的详细信息。
  j* v/ C5 M, @! l( S: w% wCREATE TABLE Order_contains_items (Item_id CHAR(4),Order_no INT,Quantity_ordered INT,Ordered_price REAL,PRIMARY KEY(Item_id,Order_no),FOREIGN KEY(Order_no) REFERENCES Order(Order_no),FOREIGN KEY(Item_id) REFERENCES Item(Item_id));现在我要计算了
& \3 M, Q/ Y2 y) c, `+ cOrder_contains_items.Ordered_price = Item.Unit_price * Order_contains_items.Quantity_ordered WHERE Order_contains_items.Item_id = Item.Item_id请注意,我希望它能成为表本身的一部分,而不是作为其他视图或查询。我怎样才能做到这一点?我研究了触发器和其他机制,但它们是否适用于不同表中的值,特别是在这种约束下?7 {/ l9 y% L6 l, Y/ {3 g& @
我试图根据另一列计算Column以下触发?
; ?' t% _4 U4 r' W2 Z% oCREATE TRIGGER Order_price BEFORE INSERT ON Order_contains_items    FOR EACH ROW BEGIN        SET NEW.Ordered_price = Item.Unit_price * NEW.Quantity_ordered            WHERE NEW.Item_id = Item.Item_iEND;但这似乎没用; }+ [, K8 l" S0 I8 ?0 q
                                                                % I; K  q+ v0 J  a" b1 x& L% Z
    解决方案:                                                                0 ]5 z& f1 y; ?
                                                                这是如何在MySQL执行此操作(同时使用您的问题)mysql和标记sql-server)
) I4 f9 W) S6 RCREATE TRIGGER tg_bi_order_contains_items BEFORE INSERT ON Order_contains_itemsFOR EACH ROW  SET NEW.Ordered_price =  (    SELECT Unit_price * NEW.Quantity_ordered      FROM Item     WHERE Item_id = NEW.Item_id     LIMIT 1  );CREATE TRIGGER tg_bu_order_contains_items BEFORE UPDATE ON Order_contains_itemsFOR EACH ROW  SET NEW.Ordered_price =  (    SELECT Unit_price * NEW.Quantity_ordered      FROM Item     WHERE Item_id = NEW.Item_id     LIMIT 1  );这是 SQLFiddle    演示
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则