У нас есть такие таблицы:
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, так как он набрал >=30 как в 2001, так и в 2002 году.
Я использую следующую процедуру, но она терпит неудачу, так как добавляет бонус обоим игрокам!!!
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;