Ik heb hieronder weergegeven wat er werd gezegd in de opmerkingen bij de vraag:
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;
...
Merk op dat ik de updates heb gewijzigd van UPDATE ... JOIN
aangezien MySQL u niet toestaat de gegevens van de getriggerde tabel te wijzigen; terwijl je table_a niet echt bijwerkte, had de JOIN genoeg kunnen zijn voor MySQL om bezwaar te maken... dat en de joins zouden elke rij in table_b/c
hebben bijgewerkt die een overeenkomst had in table_a
, niet alleen table_a
rijen gerelateerd aan de waarden in of rij van de trigger.