2011-10-23 52 views
0

即時創建一個函數,必須返回一個團隊的目標作爲一個家庭和遠離 首先它總結所有本地目標,然後它總結所有訪問者的目標,並保存到變量,但問題是,我想知道我能做什麼,如果沒有數據,我的意思是,當我返回NULL時我能做些什麼,我嘗試過IF IFE但仍然不工作,這裏是代碼:IF ELSE with NULL values mysql

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 [email protected]; 
SELECT SUM(gvis) INTO @vgvis FROM partidos WHERE [email protected]; 
IF @vgloc = NULL THEN 
SET @vgloc = 0; 
END IF; 
IF @vgvis = NULL THEN 
SET @vgvis = 0; 
END IF; 
SET @[email protected][email protected]; 
RETURN @vgoles; 
END 

感謝,並有一個愉快的一天

回答

4

IF @vgloc = NULL THEN像您期望不起作用,因爲你不能隨e檢查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 [email protected]; 
SELECT COALESCE(SUM(gvis),0) INTO @vgvis FROM partidos WHERE [email protected]; 
+0

它的工作!非常感謝! PD:既然是一個函數,我不能在參數變量上加一個'@',那是另一個問題,但現在它非常好用! –