0

質問:

UPDATE列の値を/INSERTトリガーNEW変数に選択するときに使用する正しい構文は何ですか?

詳細:

以下は、私が使用している[簡略化された]テーブルとクエリです。この例では、再帰的なものを選択しました。この場合はコメントです (つまり、画像だけでなく、コメントにもコメントできます)。いつでもコメントがコメントしている画像を知りたいのですが、その画像に到達するためにテーブルをn回クエリしたくないので(したがって、隣接リストモデルを拒否する理由)、トリガーがあります挿入時にターゲット画像をコピーします。

写真テーブル:

CREATE TABLE IF NOT EXISTS pictures
(
   id INT NOT NULL AUTO_INCREMENT,
   PRIMARY KEY ( id )
)

コメント表:

CREATE TABLE IF NOT EXISTS comments
(
   id INT NOT NULL AUTO_INCREMENT,
   picture_id INT NOT NULL,
   comment_id INT NOT NULL,
   PRIMARY KEY ( id ),
   FOREIGN KEY ( picture_id ) REFERENCES pictures ( id ),
   FOREIGN KEY ( comment_id ) REFERENCES comments ( id )
)

COMMENTS トリガー:NEW.comment_idおよびNEW.picture_idNOT NULLであるため、デフォルトでゼロ ( ) に設定されていることに注意してくださいFALSE。私の実際のプログラムではXOR、画像とコメント ID の両方を割り当てる無効な試みを拒否する必要があります。

CREATE TRIGGER bi_comments_fer BEFORE INSERT ON comments FOR EACH ROW
BEGIN
   IF ( NEW.comment_id )
   THEN
      select NEW.picture_id := picture_id from comments where id = NEW.comment_id;
   END IF;
END

こんな@風に記号を入れてみました

select @NEW.picture_id := picture_id from comments where id = NEW.comment_id;

しかし、それも構文エラーを引き起こしました。誰でもこれを修正する方法を教えてもらえますか?

4

1 に答える 1

2
SET NEW.picture_id := (SELECT picture_id FROM comments WHERE id = NEW.commend_id);
于 2012-05-07T20:25:12.023 に答える