我有一个sql语句来查找在给定架构中租金率最高的纪录片中扮演过角色的演员:
film: film_id, rental_rate,
film_actor: actor_id, film_id
film_category: film_id, category_id
category: category_id, name
SELECT *
FROM actor
WHERE actor_id IN
(SELECT actor_id
FROM film_actor
WHERE film_actor.actor_id = actor.actor_id
AND film_id IN
(SELECT film.film_id
FROM film, film_category, category
WHERE category.name = 'Documentary'
AND film.film_id = film_category.film_id
AND film_category.category_id = category.category_id
AND rental_rate = (SELECT MAX(rental_rate)
FROM film, category, film_category
WHERE category.name = 'Documentary'
AND film.film_id = film_category.film_id
AND film_category.category_id = category.category_id)));
我被要求解释的一个问题是,是否有可能编写一个SQL语句来创建一个Oracle触发器,以便将我在sql语句中找到的任何演员主演的任何未来电影的rental_rate增加10%我写过。我无法想到一个我无法理解的原因 - 除非我错过了一些东西但想对此有第二意见,以及如果可能的话我该怎么做
答案 0 :(得分:1)
假设电影类别不会改变,你很可能只能在一个触发器中执行此操作,只有associative entity film_actor
。它的关键作用是实现film
和actor
之间的多对多关系。
但是作为一个“附带好处”,你知道每次你和一些演员一起添加一部新电影时,或每次你添加一部至少在你的一部电影中演过的演员时,这张表都会被触及。如果你以某种方式更新现有电影和现有演员之间的关联,也会感动。
因此,在此表上使用触发器AFTER INSERT OR UPDATE
可以解决问题。