2

テーブルにトリガーを作成しようとしています。データを挿入すると、ある列 (メモ) からデータを取得し、別のテーブル (masterData) の列メモ (追加) をデータで更新しようとします。見つからない場合は、insert ステートメントを別のテーブルにコピーします (failedtofind)。私のトリガーは以下のとおりですが、IF ステートメントに構文エラーがあると報告され、うまく動作しません。

DELIMITER $$
TRIGGER `testdb`.`testTable`
AFTER INSERT ON `testdb`.`testTable`
FOR EACH ROW
BEGIN    
    IF ((SELECT PrimaryID FROM testdb.masterData WHERE PrimaryID = NEW.PrimaryID) > 0 )
        UPDATE masterData AS t
        SET t.Additional = NEW.Notes
        WHERE t.PrimaryID = NEW.PrimaryID;
    ELSE
        INSERT IGNORE INTO failedtofind SET (all the columns);
    END IF;

END$$

また、これは私がすべき方法ですか?私はデータベースに関しては初心者なので、いつものように、何か間違ったことをしている場合は、お気軽に修正してください。

4

1 に答える 1

3

あなたはあなたのTHEN後にIF(...)あるはずです

 IF ((SELECT PrimaryID FROM testdb.masterData WHERE PrimaryID = NEW.PrimaryID) > 0 ) THEN
 ...

そのPrimaryID> 0を持つレコードが見つからない場合、SELECT ステートメントはNULL(0 ではなく) と評価されます。NULL > 0ただし、 は に評価されNULL、 に行が挿入されるため、期待どおりに動作するはずfailedtofindです。

于 2012-07-30T01:12:15.873 に答える