создать триггер необходимо обновить таблицу 2 при обновлении таблицы 1 - PullRequest
0 голосов
/ 24 февраля 2020

Хотел бы создать триггер в mysql необходимо обновить t2.orderstatus как «неактивный» при обновлении t2.inactivedate и обновить t2.orderstatus как «активный» при обновлении t2.activedate. Пытался адаптироваться ниже одного. но не удалось

DROP TRIGGER IF EXISTS trigger_on_stockhistory_update;
DELIMITER $$
CREATE TRIGGER trigger_on_stockhistory_update
AFTER update ON stockhistory.inactivedate
FOR EACH ROW
BEGIN
    UPDATE  mastersku
    SET ordernow ='InActive'
    WHERE   `SSKU`  = NEW.SSKU;

END;
$$
DELIMITER;

1 Ответ

1 голос
/ 24 февраля 2020

Вы не можете установить триггер при изменении поля. Это может быть только на уровне таблицы:

DROP TRIGGER IF EXISTS trigger_on_stockhistory_update;
DELIMITER $$

CREATE
    TRIGGER `trigger_on_stockhistory_update` AFTER UPDATE
    ON `stockhistory`
    FOR EACH ROW BEGIN
    IF OLD.inactivedate <> NEW.inactivedate THEN
        UPDATE  mastersku
        SET ordernow ='InActive'
        WHERE   `SSKU`  = NEW.SSKU;
    END IF;

    IF OLD.activedate <> NEW.activedate THEN
        UPDATE  mastersku
        SET ordernow ='Active'
        WHERE   `SSKU`  = NEW.SSKU;
    END IF;
    END$$

DELIMITER ;

или небольшой элегантный запрос с использованием оператора CASE:

DROP TRIGGER IF EXISTS trigger_on_stockhistory_update;
DELIMITER $$

CREATE
    TRIGGER `trigger_on_stockhistory_update` AFTER UPDATE
    ON `stockhistory`
    FOR EACH ROW BEGIN
        UPDATE  mastersku
        SET ordernow = CASE
            WHEN OLD.inactivedate <> NEW.inactivedate THEN 'InActive'
            WHEN OLD.activedate <> NEW.activedate THEN 'Active' 
            ELSE ordernow
        END
        WHERE
          SSKU = NEW.SSKU;

    END$$

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