2

我目前正在创建某种库存系统。

我有tbl1我保存项目的地方。在tbl1中,我有专栏qty或可用库存。

表1:

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

我还有一张表格tbl2,我在其中保存了发行项目的所有交易。在这个表中有issued_qty

表2

id requested_by product  issued_qty
1  john         mouse    2

我的问题是如何tbl2在更新tbl1.qty (tbl1.qty - tbl2.issued_qty).

例如:当我在tbl2request_by、product 和 qty_issued 中插入记录时,我希望tbl1自动更新。因为我们向 John 发放了 2 个(数量)鼠标。tbl1中鼠标的记录,应该自动减到no。发行数量tbl2

我的想法是使用TRIGGER

但不幸的是我没有成功..你能帮我解决这个问题吗..

谢谢。

4

1 回答 1

8

如果您不期望有大量数据,请使用视图或存储过程即时计算并返回实际数量。从长远来看,它可能会为您省去很多麻烦。

您的视图(实际上是视图)可能看起来像

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;

会得到

| 身份证 | 产品 | 数量 |
----------------------
| 1 | 鼠标 | 8 | -- 数量是当前的
| 2 | 键盘 | 15 |
| 3 | 显示器 | 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演示

于 2013-08-16T03:03:14.750 回答