2011-10-23 14 views
0

チームのゴールを家庭や離れて返さなければならない機能を作成するときに問題が発生する まず、すべてのローカルゴールを合計し、すべての訪問者ゴールを合計し、変数に保存します問題は、データがないと何ができるのか知りたいのですが、NULLを返すときに何ができるのですか?IF ELSEで試してみましたがまだ動作していません。ここにコードがあります:NULL値のある場合は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 

おかげで、あなたは電子とNULLをチェックすることはできませんので、あなたが期待するようIF @vgloc = NULL THENが動作しない素敵な一日

答えて

4

を持っています品質(=)。 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:関数なので、パラメータ変数に '@'をつけることはできません。それはもう一つの問題ですが、今はとてもうまくいきます! –