触发对每个营地的所有元素求和
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 ;
未引用 NEW
或 OLD
的触发器出现问题 -- 正在修改的行中的值。我猜这就是你想要的。
我有 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 ;
未引用 NEW
或 OLD
的触发器出现问题 -- 正在修改的行中的值。我猜这就是你想要的。