Jag har visat nedan vad som sades i kommentarerna till frågan:
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;
...
Observera att jag ändrade uppdateringarna från UPDATE ... JOIN
eftersom MySQL inte tillåter dig att ändra data i den utlösta tabellen; medan du faktiskt inte uppdaterade table_a, kunde JOIN ha räckt för att MySQL skulle ha invänt... det och joinningarna skulle ha uppdaterat varje rad i table_b/c
som hade en matchning i table_a
, inte bara table_a
rader relaterade till värdena i eller rad av utlösaren.