2013-11-23 148 views
2

我有一個表格,其中包含商店中每個商品的單價和其他詳細信息。計算另一個表中另一列的列值

CREATE TABLE Item (Item_id CHAR(4), Description CHAR(40), Sizes CHAR(40), Weight REAL, Unit_price REAL, PRIMARY KEY(Item_id)); 

另一個包含每個訂單中包含的項目的詳細信息。

CREATE 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)); 

現在我想計算

Order_contains_items.Ordered_price = Item.Unit_price * Order_contains_items.Quantity_ordered WHERE Order_contains_items.Item_id = Item.Item_id 

注意,我希望它是表本身的一部分,而不是一個不同的視圖或查詢。我怎樣才能做到這一點?我研究觸發器和其他機制,但它們是否適用於不同表中的值,特別是在這些約束下?

我試圖根據Column calculated from another column?以下觸發:

CREATE 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_i 
END; 

但它似乎沒有工作

+0

是的,觸發器可以做到這一點。你需要在'INSERT'上計算一個值,如果你允許的話,'UPDATE'。 – HABO

+0

@HABO:我嘗試了以下基於[鏈接](http://stackoverflow.com/questions/5222044/column-calculated-from-another-column) 'CREATE 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_i END;' 但它似乎並沒有工作 – akhiljain

+0

你在mysql-server-2005解決了嗎,還是兩個表在不同的數據庫? – HABO

回答

2

這裏是你如何能做到在MySQL的(你的問題時帶上mysqlsql-server

CREATE TRIGGER tg_bi_order_contains_items 
BEFORE INSERT ON Order_contains_items 
FOR 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_items 
FOR EACH ROW 
    SET NEW.Ordered_price = 
    (
    SELECT Unit_price * NEW.Quantity_ordered 
     FROM Item 
    WHERE Item_id = NEW.Item_id 
    LIMIT 1 
); 

這裏是SQLFiddle演示

相關問題