Tôi đã hiển thị bên dưới những gì đã được nói trong các nhận xét cho câu hỏi:
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;
...
Lưu ý rằng tôi đã thay đổi các bản cập nhật từ UPDATE ... JOIN
vì MySQL không cho phép bạn thay đổi dữ liệu của bảng được kích hoạt; trong khi bạn không thực sự cập nhật table_a, thì JOIN có thể đã đủ để MySQL phản đối ... điều đó và các liên kết sẽ cập nhật mọi hàng trong table_b/c
đã khớp trong table_a
, không chỉ table_a
các hàng liên quan đến các giá trị trong hoặc hàng của trình kích hoạt.