我对触发器还不熟悉,但已经编写了这个触发器
DELIMITER $$
CREATE TRIGGER stockupdate
AFTER INSERT ON inventory.orderdetails
FOR EACH ROW
BEGIN
UPDATE inventory.stockitem s
INNER JOIN inventory.OrderDetails d ON s.ID = d.Item
INNER JOIN inventory.orders o ON ebayOrderNumber = d.OrderNumber
SET s.`Sold Date` = o.`Order Date`, s.EbayOrderNumber = o.ebayOrderNumber, s.`Sale Price` = d.Price
WHERE s.ID = d.Item;
END$$
DELIMITER ;
当前它没有按预期更新表stockitem。请问有什么明显的错误是我做错的吗?
非常感谢您的光临。
1条答案
按热度按时间ecr0jaav1#
这是因为join返回了orderdeails和orders表中的所有或大部分记录,而您并没有抑制它们
sql_safe_updates
安全功能。在中您肯定缺少表别名
o ON ??.ebayOrderNumber = d.OrderNumber
. 除此之外,WHERE s.ID = d.Item;
是多余的,因为表联接已经这样做了。你的where条件应该更明确,并告诉哪个库存项目更新。话虽如此,我不明白你为什么要用卖出价更新库存表?
orderDetails
已经包含了这些为您和如果你有许多数量为一个单一的股票?i、 e 100台戴尔笔记本电脑。你的库存中没有每台戴尔笔记本电脑100条记录吗?并用售价更新每个记录?不管怎样,我让你来决定。。