2017-05-10 2 views
0

Ich versuche, diesen Code Arbeit zu machen, aber ohne Erfolg ..MySQL Trigger if-else-Insert Update

DELIMITER $$ 

CREATE 
    TRIGGER `update_tbl1` AFTER UPDATE 
    ON `tbl1` 
    FOR EACH ROW BEGIN 

     IF (SELECT count(*) FROM tbl1 WHERE stn=NEW.stn) = 1 
     THEN 
     UPDATE tbl2 SET date_posted=NEW.date_posted WHERE stn=NEW.stn; 
     ELSE 
     INSERT INTO tbl2 (stn) VALUES (NEW.stn); 
     END IF 

    END$$ 

DELIMITER ; 

Ich habe zwei Tabellen, und ich möchte einen Trigger, tbl2 zu aktualisieren, wenn die tbl1 ist aktualisiert, nur wenn die Daten bereits auf dem Tabl2 vorhanden sind, andernfalls einfügen. Mein Code scheint machbar und der Fehler scheint syntaxbezogen zu sein, aber ich kann nicht finden wo.

EDIT:

Hier ist der Fehler:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'INTO tbl2 (stn) VALUES (NEW.stn); END IF END' at line 10 

Antwort

0

Über Syntaxfehler, ich denke, es ist genau das, was Sie ; nach END IF Semikolon forgot, versuchen Sie folgendes:

DELIMITER $$ 

CREATE 
    TRIGGER `update_tbl1` AFTER UPDATE 
    ON `tbl1` 
    FOR EACH ROW BEGIN 

     IF (SELECT count(*) FROM tbl1 WHERE stn=NEW.stn) = 1 
     THEN 
     UPDATE tbl2 SET date_posted=NEW.date_posted WHERE stn=NEW.stn; 
     ELSE 
     INSERT INTO tbl2 (stn) VALUES (NEW.stn); 
     END IF; 

    END$$ 

DELIMITER ; 
+0

Ich bin so verlegen, aber danke für Ihre Adleraugen! :) – xjshiya

0

Ich bin nicht sicher, was die Syntaxfehler, aber die Logik, die Sie wollen, ist:

INSERT INTO tbl2 (stn) 
    VALUES (NEW.stn) 
    ON DUPLICATE KEY UPDATE SET date_posted = NEW.date_posted; 

Damit dies funktionieren, benötigen Sie einen eindeutigen Index auf tbl2(stn):

CREATE UNIQUE INDEX unq_tbl2_stn ON tbl2(stn); 

Hinweis: Dadurch wird Ihr bestimmter Syntaxfehler nicht behoben. Dies adressiert einen logischen Fehler im Code.