Обновление MySQL после триггера вставки

0

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

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 ;

В настоящее время он не обновляет таблицу акций, как ожидалось. Есть ли что-то очевидное, что я сделал неправильно, пожалуйста?

Большое спасибо за то, что посмотрели.

  • 0
    Я не вижу никаких ссылок на НОВЫЙ или СТАРЫЙ. Какой смысл этого триггера?
  • 0
    Я думаю, что ваш WHERE должен быть s.ID = NEW.Item
Теги:
triggers

1 ответ

0
Лучший ответ

Это потому, что ваше соединение возвращает все или большинство записей из таблицы oderDetails и других, и вы не sql_safe_updates функцию безопасности sql_safe_updates.

У вас явно отсутствует псевдоним таблицы в o ON??.ebayOrderNumber = d.OrderNumber. Кроме того, WHERE s.ID = d.Item; является избыточным, поскольку ваши таблицы присоединяются уже к этому. Условие Where должно быть более явным и указать, какой элемент запаса обновить.

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

  • 0
    Большое спасибо за ваши комментарии, которые все действительны. Мне нужно немного поспать, а затем отойти назад и еще раз, более логично, посмотреть на структуру, чтобы все сделать правильно. Ваша помощь и терпение были высоко оценены.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню