Jeśli nie spodziewasz się ogromnych ilości danych, użyj widoku lub procedury składowanej, aby obliczyć na bieżąco i zwrócić rzeczywistą ilość. Na dłuższą metę może to zaoszczędzić wiele bólu głowy.
Twój widok (w rzeczywistości widoki) może wyglądać tak
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;
Kiedy to zrobimy
SELECT * FROM vw_table1;
dostanie
| ID | PRODUCT | QTY | ----------------------- | 1 | mouse | 8 | -- the quantity is current | 2 | keyboard | 15 | | 3 | monitor | 8 |
Oto SQLFiddle demo
Teraz, jeśli z jakiegoś powodu chcesz zarządzać ilością zapasów za pomocą wyzwalacza, może to wyglądać tak
CREATE TRIGGER tg_ai_table2
AFTER INSERT ON table2
FOR EACH ROW
UPDATE Table1
SET qty = qty - NEW.issued_qty
WHERE product = NEW.product;
Oto SQLFiddle demo