2011-10-23 3 views
0

팀의 목표 금액을 집으로 돌려 보내야하는 기능을 만드는 데 문제가있는 경우 먼저 모든 지역 목표를 합한 다음 모든 방문자 목표를 합한 다음 변수에 저장합니다. 그러나 문제는, 데이터가 없다면 무엇을 할 수 있는지 알고 싶습니다. NULL을 반환 할 때 무엇을 할 수 있습니까? 아니면 IF와 함께 시도했지만 여전히 작동하지 않습니다. 코드는 다음과 같습니다.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을 확인할 수 없기 때문에

답변

4

IF @vgloc = NULL THEN가 작동하지 않습니다 품질 (=). 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 : 함수이기 때문에 매개 변수 변수에 '@'을 넣을 수 없습니다. 다른 문제 였지만 지금은 매우 좋습니다! –

관련 문제