He mostrado a continuación lo que se dijo en los comentarios a la pregunta:
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;
...
Tenga en cuenta que cambié las actualizaciones de UPDATE ... JOIN
ya que MySQL no le permite cambiar los datos de la tabla activada; mientras que en realidad no estaba actualizando table_a, JOIN podría haber sido suficiente para que MySQL se opusiera ... eso y las uniones habrían actualizado cada fila en table_b/c
que tenía una coincidencia en table_a
, no solo table_a
filas relacionadas con los valores en o fila del disparador.