我在创建一个函数时遇到问题,该函数必须将团队的目标数量作为主页和远程返回 首先它总结所有本地目标,然后它总结所有访问者目标,并保存到变量,但问题是,我想知道如果没有数据我该怎么办,我的意思是,当它返回NULL时我该怎么办,我试过IF ELSE但仍然无法正常工作,这里是代码:
CREATE DEFINER=`root`@`localhost` FUNCTION `vgoles`(`veq` int) RETURNS int(11)
BEGIN
#Routine body goes here...
DECLARE vgloc INT;
DECLARE vgvis INT;
DECLARE vgoles INT;
SELECT SUM(gloc) INTO @vgloc FROM partidos WHERE eqloc=@veq;
SELECT SUM(gvis) INTO @vgvis FROM partidos WHERE eqvis=@veq;
IF @vgloc = NULL THEN
SET @vgloc = 0;
END IF;
IF @vgvis = NULL THEN
SET @vgvis = 0;
END IF;
SET @vgoles=@vgloc+@vgvis;
RETURN @vgoles;
END
谢谢,祝你有愉快的一天
答案 0 :(得分:4)
IF @vgloc = NULL THEN
无法正常工作,因为您无法检查NULL
是否相等(=
)。 NULL
是一个特殊值,它不等于任何东西,甚至不等于它自己。
SELECT (3 = NULL) --yields--> NULL
SELECT NOT (3 = NULL) --yields--> NULL
SELECT (NULL = NULL) --yields--> NULL
SELECT (NULL <> NULL) --yields--> NULL
SELECT (NULL IS NULL) --yields--> TRUE
要检查NULL值,您需要:IF @vgloc IS NULL THEN
。
但您也可以使用 COALESCE()
功能进一步简化:
SELECT COALESCE(SUM(gloc),0) INTO @vgloc FROM partidos WHERE eqloc=@veq;
SELECT COALESCE(SUM(gvis),0) INTO @vgvis FROM partidos WHERE eqvis=@veq;