2017-05-10 22 views
0

は私が..MySQLのトリガのif-else挿入更新

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 ; 

このコードの動作をしようとしたが無駄にしています、私は2つのテーブルを持っている、と私はTBL1の場合はTBL2を更新するトリガーをしたいですデータがtbl2にすでに存在する場合にのみ更新され、そうでない場合は挿入されます。私のコードは実行可能と思われ、エラーは構文に関連しているようですが、どこに見つけることができません。

EDIT:

ここ

はエラーです:

#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 

答えて

0

、私はそれはあなたがEND IF;をセミコロン忘れだけで何だと思い、以下試してください。

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

私はとても恥ずかしいですが、あなたのワシの目をありがとう! :) – xjshiya

0

私は構文エラーが何であるかわからないんだけど、あなたがしたいロジックは次のとおりです。このために

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

あなたはtbl2(stn)にユニークなインデックスが必要です:

CREATE UNIQUE INDEX unq_tbl2_stn ON tbl2(stn); 

注:これは特定の構文エラーを修正するものではありません。これは、コード内の論理エラーを解決します。構文エラーについて

関連する問題