Я написал функцию sql для базы данных клиентов рейса, которая рассчитывает бонус для клиентов. Предположим, есть таблица клиентов и таблица бронирования. Если клиент зарезервирует несколько мест на рейс, он получит бонус относительно продолжительности полета. Если идентификатор клиента не появится в таблице бронирования, он вернет бонус, в противном случае он рассчитал бонус.
CREATE FUNCTION `test5`(ID int(11) ) RETURNS int(11)
BEGIN DECLARE result int;
if (select ID from customer where ID not in (select CustomerID from reservation) limit 1) then set result = -1;
else if (select ID from customer where ID in (select CustomerID from reservation) limit 1) then set result = (select sum(c.NoReservedSeats*f.FlightDurationInMinutes) as Bonus
from reservation c, flightexecution f where c.FlightNo=f.FlightNo
and f.DepartureDateAndTimeUTC = c.DepartureDateAndTimeUTC
and c.CustomerID = c.CustomerID group by c.CustomerID limit 1) ;
end if;
end if;
RETURN result;
END
Итак, это бонусные значения для идентификаторов клиентов в таблице бронирования
+-------+
| Bonus |
+-------+
| 360 |
| 180 |
| 2280 |
| 2040 |
| 180 |
| 7180 |
+-------+
Итак, первый оператор if работает, но второй не работает, я должен установить предел 1, потому что в противном случае получим «Ошибка 1242 Подзапрос возвращает более одной строки». Но с этим ограничением 1 выражение я получаю за каждого клиента 360 бонусов, что является моей проблемой.