триггер для суммирования всех элементов для каждого лагеря - PullRequest
0 голосов
/ 01 мая 2020

У меня есть 3 стола аптека, есть и лекарства

аптека:

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

I Мне нужно вычислить вычисляемый столбец с триггером, который даст мне сумму всех аптек, поэтому я думаю, что мне нужно что-то вроде

 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 ;

, но когда я пытаюсь сделать вставку в иметь

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

1 Ответ

0 голосов
/ 01 мая 2020

Я думаю, что вы ищете:

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 - значения в изменяемой строке. Я предполагаю, что это то, что вы хотите.

...