IF ELSE со значениями NULL mysql - PullRequest
0 голосов
/ 23 октября 2011

У меня проблемы с созданием функции, которая должна возвращать количество голов команды как дома, так и в гостях. Сначала он суммирует все локальные цели, а затем суммирует все цели посетителей и сохраняет в переменные, но проблема в том, что я хочу знать, что я могу сделать, если нет данных, я имею в виду, что я могу сделать, когда он возвращает 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 Ответ

4 голосов
/ 23 октября 2011

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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...