我有以下关系:
Restaurant(rname, address, phone, stars)
Chef(cname, specialdish, rating)
CooksFor(cname, rname, salary)
我的任务是编写一个触发器,使每位厨师的salary
增加10%,因为他们做饭的餐厅的星级数量会增加。
以下是我写的内容,基于我在课堂上的笔记和我在网上找到的一些例子:
CREATE TRIGGER salary_increase BEFORE UPDATE ON Restaurant
FOR EACH ROW
BEGIN
IF NEW.stars > stars
THEN UPDATE Chef
SET salary = 1.1*salary
WHERE EXISTS (SELECT C.cname FROM Chef C, CooksFor CF
WHERE C.cname = CF.cname AND
CF.rname = Restaurant.rname)
END IF
END
这会有用吗?有更好/更正确的方法吗?
我试图在网上找到一个类似问题的例子,但发现大多数人只需要引用另一个表。既然我可以通过使用CooksFor表找到哪家厨师为哪家餐馆做饭的唯一方法,那么在尝试解决这个问题时我会感到有些困惑。
谢谢!
答案 0 :(得分:1)
您的触发逻辑看似合理,我会考虑将INNER JOIN
用于UPDATE
:
UPDATE C
SET C.salary = 1.1*C.salary
FROM Chef C
INNER JOIN CooksFor CF
ON CF.cname = C.cname
AND CF.rname = NEW.rname