これらのテーブルがあります:
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 |
+----+-------+------+
問題は、過去2年間(2001年と2002年)のプレーヤーが30以上のゴールを達成した場合、どうすればプレーヤーのボーナスを上げることができるかということです。たとえば、ここでは、2001年と2002年の両方でスコアが30以上だったため、id=02のプレーヤーがボーナスを受け取るようにします。
私は次の手順を使用していますが、両方のプレーヤーにボーナスが追加されるため失敗します!!!
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;