Кажется, это основной c вопрос, но я не могу его понять
У меня есть 2 таблицы: table_a
и table_b
SELECT * FROM `table_a`
+----+--------+----------+
| id | a_item | a_values |
+----+--------+----------+
| 1 | 1 | 5 |
| 2 | 1 | 5 |
+----+--------+----------+
SELECT * FROM `table_b`;
+--------+-------+
| a_item | total |
+--------+-------+
| 1 | 10 |
+--------+-------+
# NOTE: total is TEN
Как видно, я использую триггер для SUM (a_values) из table_a
и сохраняю результат в table_b
. Я использую триггер:
CREATE TRIGGER totaling
AFTER INSERT ON table_a
FOR EACH ROW
BEGIN
INSERT INTO table_b(a_item, total)
SELECT a_item, SUM(a_values) FROM table_a
GROUP by a_item
ON DUPLICATE KEY UPDATE
total = VALUES(total);
END
Теперь скажем, я обновляю table_b
:
UPDATE table_b
SET total = total - 5
WHERE a_item = 1
# NOTE: I'm subtracting FIVE from previous total which was TEN
, и результат в столбце table_b
total равен 5, что и ожидается.
SELECT * FROM `table_b`
+--------+-------+
| a_item | total |
+--------+-------+
| 1 | 5 |
+--------+-------+
До этого момента все работает соответственно. Однако, когда я делаю вставку на table_a
, вычисления прекращаются. например:
INSERT INTO table_a(a_item, a_values)
VALUES
(1, 5);
SELECT * FROM `table_b`;
+--------+-------+
| a_item | total |
+--------+-------+
| 1 | 15 |
+--------+-------+
# NOTE: see how the total has changed from FIVE to FIFTEEN, my expected result is TEN
Я мог бы исправить эту проблему, напрямую обновив table_a
, тогда триггер вставки будет только SUM с его существующими значениями, которые дадут мне ожидаемый результат.
вопрос в том, есть ли способ, при котором я мог бы получить желаемый результат, не манипулируя table_a
, а только манипулируя table_b
, или мне нужно изменить триггер вставки?
спасибо.