我有这些表格:
和一些观点:
查看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星的电影。该视图包含电影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属性。我可以这样做吗?我不习惯触发和观察太多:(
答案 0 :(得分: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星?我的代码是前者的选择。)