2

私はこれらのテーブルを持っています:

  • 映画 (mID、タイトル、年、監督)
  • レビュアー ( rID, name )
  • 評価 (rID、mID、星、評価日)

およびいくつかのビュー:

  • ビュー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には、星 3 つ​​以上の評価が少なくとも 1 つある映画が含まれています。ビューには、映画 ID と映画のタイトルが含まれています。

    create view HighlyRated as 
      select mID, title 
      from Movie 
      where mID in (select mID from Rating where stars > 3) 
    
  • ビューNoRatingには、データベースに評価のない映画が含まれています。ビューには、映画 ID と映画のタイトルが含まれています。

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

ここに私のデータセットがあります: http://dfiles.eu/files/vlylwacdd

ビュー LateRating の title 属性を更新できる代わりのトリガーを作成するように求められました。私はトリガーとビューにあまり慣れていません:(

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 に答える