我们有这些表格:
player(id,salary,bonus)
productivity_per_year(id,goals,year)
生产力表(ID,目标,年份)
+----+-------+------+
| ID | Goals | Year |
+----+-------+------+
| 01 | 20 | 2001 |
| 01 | 30 | 2002 |
| 02 | 30 | 2001 |
| 02 | 40 | 2002 |
+----+-------+------+
问题是,如果玩家过去两年(2001年和2002年)达到30个或更多目标,我怎样才能提高玩家的奖金。例如,我希望奖金由id = 02的玩家拍摄,因为他在2001年和2002年都得分> = 30.
我正在使用以下程序,但它失败了,因为它增加了两个玩家的奖金!!!
create or replace
procedure football
AS
BEGIN
update player p
set p.bonus = p.bonus + 500
where p.id in
(select s.id from productivity s where
s.goals >30
and s.year>=2001
and s.id = p.id
);
END;
答案 0 :(得分:1)
两名球员都获得了更大的奖金,因为自2001年以来,这两名球员都打进了超过30个进球。这就是你对你的查询所做的。但是,要仅在2001年和2002年获得超过30个进球的球员获得奖金,您可以尝试以下查询。
update player p
set bonus = bonus + 500
where p.id in
((select s.id from productivity s where s.goals > 30 and s.year = 2001 and s.id = p.id)
intersect
(select s.id from productivity s where s.goals > 30 and s.year = 2002 and s.id = p.id));
使用postgresql可以正常工作。