Обновление MySQL после триггера вставки - PullRequest
0 голосов
/ 24 мая 2018

Я новичок в триггерах, но закодировал этот

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 Ответ

0 голосов
/ 25 мая 2018

Это потому, что ваше объединение возвращает все или большинство записей из таблицы 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 на складе?и обновлять каждую запись по продажной цене?В любом случае, я оставляю это на ваше усмотрение ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...