Jeg har vist nedenfor, hvad der blev sagt i kommentarerne til spørgsmålet:
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;
...
Bemærk, at jeg ændrede opdateringerne fra UPDATE ... JOIN
da MySQL ikke tillader dig at ændre dataene i den udløste tabel; mens du faktisk ikke opdaterede table_a, kunne JOIN have været nok til, at MySQL havde gjort indsigelse... det, og joins ville have opdateret hver række i table_b/c
der havde et match i table_a
, ikke kun table_a
rækker relateret til værdierne i eller række af triggeren.