Poniżej pokazałem, co zostało powiedziane w komentarzach do pytania:
CREATE TRIGGER some_trigger AFTER UPDATE ON table_a
FOR EACH ROW BEGIN
DECLARE tname VARCHAR(20);
IF (NEW.field_offer=1) THEN
UPDATE `table_b`
SET STOCK = CASE NEW.field_state
WHEN 0 THEN STOCK - 1
WHEN 1 THEN STOCK + 1
ELSE STOCK
END
WHERE ID=NEW.ref_field
;
ELSEIF (NEW.field_offer=0) THEN
UPDATE `table_c`
SET STOCK = CASE NEW.field_state
WHEN 0 THEN STOCK - 1
WHEN 1 THEN STOCK + 1
ELSE STOCK
END
WHERE ID=NEW.ref_field
;
END IF;
...
Zauważ, że zmieniłem aktualizacje z UPDATE ... JOIN
ponieważ MySQL nie pozwala na zmianę danych wyzwalanej tabeli; chociaż w rzeczywistości nie aktualizowałeś table_a, JOIN mogło wystarczyć, aby MySQL sprzeciwił się ... to i złączenia zaktualizowałyby każdy wiersz w table_b/c
który miał dopasowanie w table_a
, a nie tylko table_a
wiersze powiązane z wartościami w lub wierszu wyzwalacza.