Níže jsem ukázal, co bylo řečeno v komentářích k otázce:
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;
...
Všimněte si, že jsem změnil aktualizace z UPDATE ... JOIN
protože MySQL vám neumožňuje měnit data spouštěné tabulky; zatímco jste ve skutečnosti neaktualizovali table_a, JOIN mohl stačit na to, aby MySQL vznesl námitku... a spojení by aktualizovala každý řádek v table_b/c
který měl shodu v table_a
, nejen table_a
řádky související s hodnotami v nebo řádku spouštěče.