2017-02-05 49 views
0

我有3个表触发插入,更新其他表,但只有一个行

表产品(PK id_product,qty_stock) - 我有几个产品

表链接(PK FK id_product,PK FK id_order ) - 外键指向其他2个表

表顺序(PK id_order,qty_bought)

问题
一个触发器,它在创建订单行时减去qty_stock的qty_bought,问题是FOR EACH ROW减去所有产品行,并且我无法找到一种方法来告诉哪个产品,因为订单表没有id_product参考。有解决方案还是需要更改表格?谢谢。

DROP TRIGGER IF EXISTS OnInsertStock; 
DELIMITER // 
CREATE TRIGGER OnInsertStock 
    AFTER INSERT ON order FOR EACH ROW 
    BEGIN 
    UPDATE product   
    SET qty_stock = qty_stock - new.qty_bought 
    END // 
DELIMITER ; 

回答

2

您需要一个Multi Table Update

加入productlink,然后仅更新product的字段。

DROP TRIGGER IF EXISTS OnInsertStock; 
DELIMITER // 
CREATE TRIGGER OnInsertStock 
    AFTER INSERT ON order FOR EACH ROW 
    BEGIN 
    UPDATE product, link 
     SET product.qty_stock = product.qty_stock - new.qty_bought 
    WHERE product.id_product = link.id_product 
     AND link.id_order = new.id_order 
    END // 
DELIMITER ; 
+0

已经试过了,但它仍然需要,而不是只插入我添加需要的WHERE部分的最后部分的顺序 – Noobest

+0

产品从所有行了,。从链接表中选择时,需要使用id_order –

+0

像总是结束问题在其他地方,我忘记在链接表中插入信息的同时插入顺序,但是你的答案是正确的,thx的帮助。 – Noobest