मैंने नीचे दिखाया है कि प्रश्न की टिप्पणियों में क्या कहा गया था:
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;
...
ध्यान दें कि मैंने अपडेट को UPDATE ... JOIN
. से बदल दिया है चूंकि MySQL आपको ट्रिगर टेबल के डेटा को बदलने की अनुमति नहीं देता है; जब आप वास्तव में टेबल_ए को अपडेट नहीं कर रहे थे, तो जॉइन MySQL के लिए आपत्ति करने के लिए पर्याप्त हो सकता था ... जिसका table_a
. में मिलान था , न केवल table_a
ट्रिगर के मान या पंक्ति से संबंधित पंक्तियाँ।