2013-08-16 147 views
2

我目前正在创建某种库存系统。使用触发器插入后更新另一个表?

我有tbl1在我保存的项目。在tbl1中,我列了qty或剩余的可用库存。

TBL 1:

id product qty 
1 mouse 10 
2 keyboard 15 
3 monitor 8 

我也有表tbl2凡在我保存所有的交易中发行项目。在这张表中有issued_qty

tbl2的

id requested_by product issued_qty 
1 john   mouse 2 

我的问题是我怎么能行插入tbl2同时更新tbl1.qty (tbl1.qty - tbl2.issued_qty)

例如: 当我在tbl2中的requested_by,product和qty_issued中插入记录时,我想让tbl1自动更新。因为我们向John发出2(数量)的鼠标。在tbl1中的鼠标记录应该自动减少到不。在tbl2

我的想法发行量是使用TRIGGER

但不幸的是我没有成功..你可以请帮我这一个..

感谢。

回答

7

如果您不希望大量数据使用视图或存储过程来即时计算并返回实际数量。从长远来看,它可以为您节省很多头痛。

你的观点(实际观看)可能看起来像

CREATE VIEW vw_table2_sum AS 
SELECT product, SUM(issued_qty) qty 
    FROM Table2 
GROUP BY product; 

CREATE VIEW vw_table1 AS 
SELECT t.id, t.product, t.qty - COALESCE(v.qty, 0) qty 
    FROM Table1 t LEFT JOIN vw_table2_sum v 
    ON t.product = v.product; 

当我们做

SELECT * FROM vw_table1; 

会得到

 
| ID | PRODUCT | QTY | 
----------------------- 
| 1 | mouse | 8 | -- the quantity is current 
| 2 | keyboard | 15 | 
| 3 | monitor | 8 | 

这里是SQLFiddle演示

现在,如果你因为某些原因要管理一个触发您的库存量也可能是这样的

CREATE TRIGGER tg_ai_table2 
AFTER INSERT ON table2 
FOR EACH ROW 
    UPDATE Table1 
    SET qty = qty - NEW.issued_qty 
    WHERE product = NEW.product; 

这里是SQLFiddle演示

+0

哇,非常感谢peterm爵士。这就是我现在要找的一个星期。 – ChocoMartin

+0

@ChocoMartin不客气。查看视图更新。 – peterm

相关问题