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代码
谢谢。
答案 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)