Ако не очаквате огромни количества данни, използвайте изглед или съхранена процедура, за да изчислите в движение и да върнете действителното количество. Това може да ви спести много главоболие в дългосрочен план.
Вашият изглед (всъщност изгледи) може да изглежда така
CREATE VIEW vw_table2_sum AS
SELECT product, SUM(issued_qty) qty
FROM Table2
GROUP BY product;
CREATE VIEW vw_table1 AS
SELECT t.id, t.product, t.qty - COALESCE(v.qty, 0) qty
FROM Table1 t LEFT JOIN vw_table2_sum v
ON t.product = v.product;
Когато го направим
SELECT * FROM vw_table1;
ще получи
<пред>| ID | ПРОДУКТ | КОЛИЧЕСТВО |-----------------------| 1 | мишка | 8 | -- количеството е актуално| 2 | клавиатура | 15 || 3 | монитор | 8 |Ето SQLPiddle демонстрация
Сега, ако по някаква причина искате да управлявате количеството на инвентара си със задействане, може да изглежда така
CREATE TRIGGER tg_ai_table2
AFTER INSERT ON table2
FOR EACH ROW
UPDATE Table1
SET qty = qty - NEW.issued_qty
WHERE product = NEW.product;
Ето SQLPiddle демонстрация