Di seguito ho mostrato ciò che è stato detto nei commenti alla domanda:
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;
...
Nota che ho modificato gli aggiornamenti da UPDATE ... JOIN
poiché MySQL non consente di modificare i dati della tabella attivata; mentre in realtà non stavi aggiornando table_a, il JOIN potrebbe essere stato sufficiente perché MySQL si sia opposto ... e i join avrebbero aggiornato ogni riga in table_b/c
che aveva una corrispondenza in table_a
, non solo table_a
righe relative ai valori o alla riga del trigger.