2

我有这些表:

  • 电影(mID、片名、年份、导演)
  • 审稿人(rID,姓名)
  • 评级(rID、mID、星数、ratingDate)

和一些观点:

  • 视图LateRating包含 2011 年 1 月 20 日之后的电影评分。视图包含电影 ID、电影名称、星数和评分日期。

    create view LateRating as 
      select distinct R.mID, title, stars, ratingDate 
      from Rating R, Movie M 
      where R.mID = M.mID 
      and ratingDate > '2011-01-20' 
    
  • 视图HighlyRated包含至少有 1 个评分高于 3 星的电影。该视图包含电影 ID 和电影标题。

    create view HighlyRated as 
      select mID, title 
      from Movie 
      where mID in (select mID from Rating where stars > 3) 
    
  • ViewNoRating包含数据库中没有评分的电影。该视图包含电影 ID 和电影标题。

    create view NoRating as 
      select mID, title 
      from Movie 
      where mID not in (select mID from Rating)  
    

这是我的数据集:http ://dfiles.eu/files/vlylwacdd

我被要求编写一个代替触发器来更新视图 LateRating 的标题属性。我该怎么做?我不习惯触发和查看太多:(

4

1 回答 1

1

像这样的东西:

CREATE trigger update_LateRating_title INSTEAD OF UPDATE OF title ON LateRating
BEGIN
  UPDATE Movie SET title = new.title WHERE movie.mID = old.mID;
END;

根据评论中的要求,这是一个触发器,用于仅更新 LateRating 中评论大于 2 的电影:

CREATE trigger update_LateRating_title INSTEAD OF 
UPDATE OF title ON LateRating
BEGIN
  UPDATE Movie SET title = new.title 
  WHERE movie.mID = old.mID 
  AND movie.mID IN (SELECT mID FROM LateRating WHERE stars > 2);
END;

(有不同的方式来解释这个后来的请求。应该允许在某处有超过 2 星的电影更新标题,还是只允许实际有超过 2 星的记录更新?我的代码是前一种选择)。

于 2013-01-26T13:34:07.937 回答