gpt4 book ai didi

mysql - 在 sql 函数中为 customerID 分配正确的值

转载 作者:行者123 更新时间:2023-11-29 16:24:47 25 4
gpt4 key购买 nike

我为航类客户数据库编写了一个 SQL 函数,用于计算客户的奖金。假设有一张 table 的顾客和一张预订的 table 。如果客户在航类预订了一些座位,它将获得与飞行时间相关的奖励。如果 customerID 没有出现在预订表中,它将返回奖金,否则计算奖金。

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

这些是预订表中 CustomerID 的奖励值

+-------+
| Bonus |
+-------+
| 360 |
| 180 |
| 2280 |
| 2040 |
| 180 |
| 7180 |
+-------+

所以第一个 if 语句有效,但第二个 if 语句不起作用,我必须设置 limit 1,因为否则会得到“错误 1242 子查询返回多行”。但是有了这个 limit 1 表达式,我为每个客户获得 360 奖金,这是我的问题。

最佳答案

您没有测试 ID 参数是否在 reservations 中。应该是:

IF EXISTS (SELECT * FROM reservations WHERE CustomerID = ID) 
THEN SET result = (SELECT ...)
ELSE SET result = -1
END IF;
RETURN result;

此外,您应该避免对过程参数使用与您查询的任何表中的列相同的名称。该名称是否引用查询中的参数或表列可能会令人困惑。

关于mysql - 在 sql 函数中为 customerID 分配正确的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54288121/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com