触发对每个营地的所有元素求和

trigger to sum all elements for each camp

我有 3 桌药房,have and meds

药房:

id_pharm        name
   1           pharm1
   2           pharm2  
   3           pharm3
   4           pharm4
   5           pharm5

fk_id_pharm     amount    fk_id_med
1                40           2
1                 1           3
2                45           1
2                20           4
3                10           1
3                45           3

药物

  id_med            name       
    1               med1
    2               med2
    3               med3
    4               med4
    5               med5

我需要计算一个带有触发器的计算列,该触发器会给出所有药房的总和,所以我想我需要这样的东西

 id_med            name          stock   
    1               med1          55      --(45 + 10)
    2               med2          40      
    3               med3          46      --(45 + 1)
    4               med4          20
    5               med5          0

我的触发器试试

ALTER TABLE meds ADD COLUMN stock INT DEFAULT 0;

DELIMITER $$
 CREATE TRIGGER `trigger3`
 BEFORE INSERT ON `have` FOR EACH ROW BEGIN
UPDATE meds SET stock = (SELECT SUM(have.amount) FROM have INNER JOIN meds ON have.fk_id_med=meds.id_med GROUP BY meds.name);
END $$
DELIMITER ;

但是当我尝试在 have

中插入时
insert into have (fk_pharm_id, amount, fk_med_id) values (5,80,5)

我知道了:

You can't specify target table 'meds' for update in FROM clause

我想你正在寻找:

DELIMITER $$
CREATE TRIGGER trig_have_insert
AFTER INSERT ON `have`
FOR EACH ROW
BEGIN
    UPDATE meds
        SET stock = meds.stock + NEW.amount
        WHERE meds.id_med = NEW.fk_id_med;
END $$
DELIMITER ;

未引用 NEWOLD 的触发器出现问题 -- 正在修改的行中的值。我猜这就是你想要的。