Ich habe unten gezeigt, was in den Kommentaren zu der Frage gesagt wurde:
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;
...
Beachten Sie, dass ich die Aktualisierungen von UPDATE ... JOIN
geändert habe da MySQL Ihnen nicht erlaubt, die Daten der getriggerten Tabelle zu ändern; Während Sie eigentlich table_a nicht aktualisiert haben, hätte der JOIN für MySQL ausreichen können, um Einwände zu erheben ... und die Joins hätten jede Zeile in table_b/c
aktualisiert die eine Übereinstimmung in table_a
hatte , nicht nur table_a
Zeilen, die sich auf die Werte in oder Zeile des Triggers beziehen.