Это потому, что ваше объединение возвращает все или большинство записей из таблицы oderDetails и oders, а вы не подавляете sql_safe_updates
функцию безопасности.
Вам определенно не хватает псевдонима таблицы в o ON ??.ebayOrderNumber = d.OrderNumber
.Кроме того, WHERE s.ID = d.Item;
является избыточным, так как объединения таблиц уже делают это.Ваше условие «Где» должно быть более явным и указывать, какой товар необходимо обновить.
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 o.ebayOrderNumber = d.OrderNumber
SET
s.`Sold Date` = o.`Order Date`, -- update the stock
s.EbayOrderNumber = o.ebayOrderNumber,
s.`Sale Price` = d.Price
WHERE
d.orederNumber = NEW.OrderNumber, -- From this order
d.Item = NEW.item; -- and this item id
END$$
DELIMITER ;
Сказав это, я не понимаю, почему вы хотите обновить таблицу акций с продажной ценой?orderDetails
уже содержит их для вас, и что, если у вас есть много для одной акции?т.е. 100 ноутбуков Dell.Конечно, у вас нет 100 записей для каждого ноутбука Dell на складе?и обновлять каждую запись по продажной цене?В любом случае, я оставляю это на ваше усмотрение ..