具有多个列/多个条件的更新触发后的MySQL

时间:2016-07-17 22:24:34

标签: mysql

我试图让这个触发器工作:

delimiter //
CREATE TRIGGER inv_update AFTER UPDATE ON products FOR EACH ROW
  BEGIN
UPDATE inventory
   SET ea_qty = CASE
                      WHEN id = ea_id THEN
        NEW.quantity,

box_qty = CASE
                     WHEN id = box_id THEN
        NEW.quantity
   END ;
END//

delimiter ;

我也尝试了以下内容:

    delimiter //
CREATE TRIGGER inv_update AFTER UPDATE ON products AS p FOR EACH ROW
    BEGIN
IF p.id = ea_id THEN
UPDATE inventory
  SET ea_qty = NEW.p.quantity
    END IF ;
IF p.id = box_id THEN
UPDATE inventory
   SET box_qty = NEW.p.quantity
     END IF ;

 END ;//

delimiter ;

更新

我想要实现的目标是对于products表中的每次更新,都应更新清单表中相同产品的相应ID,以使库存和产品表保持同步。例如销售发生后,受影响的产品将减少sales_item数量,因此除非库存表也更新,否则库存表中的数量将与该效果销售相对应。同时,并非所有产品在库存表中都有box_id。 ea_id和box_id之间的关系是两个表中的Parent to Child,但两者都是可以进行销售的单独ID。

我真的很希望能够得到足够的帮助。

1 个答案:

答案 0 :(得分:0)

我认为这只是你的指南,我不知道你的桌子结构,我只是想象你的意思..

       delimiter //
CREATE TRIGGER inv_update AFTER UPDATE ON products_table FOR EACH ROW
BEGIN
        declare ea_idvar int(20) default 0;
        declate box_idvar int(20) default 0;

        select ea_id,box_id INTO @ea_idvar,@box_idvar from products_table where product_id = old.product_id;

        if LENGTH(@ea_idvar)>0 THEN

                update inventory_table set ea_qty = new.ea_qty where product_id = new.product_id;

    elseif LENGTH(@box_idvar)>0 THEN

        update inventory_table set box_qty = new.box_qty where product_id = new.product_id;

    end if;
 END ;//

delimiter ;

如果旧的不工作,那就改成新的..好运 希望它有所帮助。