MYSQL库存条目

时间:2017-10-10 08:46:54

标签: mysql

购买表

  

id(主键)ItemNo,ItemName,Units,Qty,Location,CPrice,   SPrice,供应商,PONO

股票表

  

id(主键),ItemNo,Qty,Location

IF EXISTS (SELECT ItemNo, Location FROM stock WHERE stock.ItemNo = 'poitem.ItemNo' AND stock.Location = 'poitem.Location') THEN 
  UPDATE stock SET stock.Qty = stock.Qty + poitem.Qty WHERE stock.ItemNo = 'poitem.ItemNo'; 
ELSE 
   INSERT INTO stock (stock.ItemNo, stock.Qty, stock.Location) SELECT poitem.ItemNo, poitem.Qty, poitem.Location FROM poitem; 
 END If

这是我的代码,但它不能正常工作 当我通过购买表输入记录时,我需要更新库存表,只有记录已存在,否则需要输入新记录。

例:
ItemNo - 数量 - 位置
 1001 - - - 15 - - - A
 1001 - - - 12 - - - B
 1002 - - - 50 - - - C
 1003 - - - 12 - - - A
任何人都可以为此编写MYSQL代码 谢谢。

1 个答案:

答案 0 :(得分:0)

您的if exists将始终评估为true(除非stock表为空),因此更新永远不会发生(除非stock表为空)。我认为一个程序在这里是不合适的,除非你为每个插入调用它。即使你是一个触发器也可能是一个更好的选择。

drop trigger if exists t;
delimiter $$
create trigger t after insert on poitems
for each row 
begin
IF EXISTS (SELECT ItemNo, Location FROM stock WHERE stock.ItemNo = new.ItemNo AND stock.Location = new.Location) THEN 
   UPDATE stock SET stock.Qty = stock.Qty + new.Qty WHERE stock.ItemNo = new.ItemNo and stock.Location = new.Location; 
ELSE INSERT INTO stock (ItemNo, Qty, Location)  values(new.ItemNo, new.Qty, new.Location) ; 
END If;
end $$

我还修改了你的update语句以匹配if exists子句并修复了insert语句和其他一些看起来错误的东西。

所以给出

drop table if exists poitems,stock;

create  TABLE poitems(id int auto_increment Primary Key, ItemNo int, ItemName varchar(10), Units int, Qty int, Location int, CPrice int
                    , SPrice int, Supplier int, PONo int);

create table stock(id int auto_increment Primary Key ,ItemNo int, Qty int, Location int);

insert into poitems(itemno,qty,location) values (1,1,1),(1,1,1),(2,2,1);

结果

+----+--------+------+----------+
| id | ItemNo | Qty  | Location |
+----+--------+------+----------+
|  1 |      1 |    2 |        1 |
|  2 |      2 |    2 |        1 |
+----+--------+------+----------+
2 rows in set (0.00 sec)