如果ELSE具有NULL值mysql

时间:2011-10-23 00:36:54

标签: mysql null if-statement

我在创建一个函数时遇到问题,该函数必须将团队的目标数量作为主页和远程返回 首先它总结所有本地目标,然后它总结所有访问者目标,并保存到变量,但问题是,我想知道如果没有数据我该怎么办,我的意思是,当它返回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

谢谢,祝你有愉快的一天

1 个答案:

答案 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;