2016-11-28 3 views
0

моя функция выглядит следующим образом:функция MySQL всегда возвращает нуль, даже если не нуль не отвечает

DELIMITER $$ 

CREATE DEFINER=`root`@`localhost` FUNCTION `get_year_groups_for_visit`(id int) RETURNS varchar(200) CHARSET latin1 
BEGIN 
declare year_text varchar(200); 

    select group_concat(year_text, ' ') into year_text from a_visit_year_group yg 
join year_group y on yg.year_group_id = y.year_group_id 
where yg.visitid = id; 

RETURN year_text; 

END 

, если я называю это с помощью

select get_year_groups_for_visit(1918) 

я получаю ответ нулевой, но если я печатаю в

select group_concat(year_text, ' ') as 'Year Groups' from a_visit_year_group yg 
join year_group y on yg.year_group_id = y.year_group_id 
where yg.visitid = 1918; 

Получать ответ «Год 13, год 12»

если я смотрю в таблицу a_visit_year_group где visitid является 1918 я

> visitid year_group_id 
    1918  14 
    1918  15 

и в таблице year_group я получаю

> year_group_id  year_text 
    14    Year 12 
    15    Year 13 

На самом деле это не представляется возможным, чтобы иметь запись в a_visit_year_group с микросхемой null значение для year_group_id или visitid, и невозможно получить запись в таблице year_group_id с нулевым значением для year_group_id или year_text, поэтому я не могу понять, почему я возвращаю только нулевые значения с помощью этой функции. Я протестировал его там, где есть только одно значение, чтобы вернуться и где есть несколько значений, и оно всегда возвращается как null. Я знаю, если вы укажете значения, а одно значение равно null, ответ всегда будет нулевым, но здесь нет нулевых ответов.

Я начинаю вытаскивать свои волосы сейчас, так как я не вижу, где я ошибаюсь, и должен быть чем-то действительно простым. Мне не хватает. Я бы очень признателен за понимание. Мне нужно получить список посещений и летних групп, участвующих в каждом посещении, и иногда для каждого визита есть несколько летних групп, а иногда их всего 1, я не хочу иметь несколько строк для каждого посещения, поэтому я думал, что смогу создать чтобы вернуть все значения как один

ответ

1

Ваша переменная имеет то же имя, что и ваш столбец year_text; в вашем запросе он не будет ссылаться на столбец, а на переменную оба раза, поэтому вы объединяете здесь переменную.

процитировать documentation:

Локальные переменные не должен иметь такое же имя, как столбец таблицы. Если оператор SQL, такой как оператор SELECT ... INTO, содержит ссылку на столбец и объявленную локальную переменную с тем же именем, MySQL в настоящее время интерпретирует ссылку как имя переменной.

Либо (желательно) использовать другое имя для переменной, или добавить таблицу (-alias) в колонке, чтобы получить правильный объем:

select group_concat(y.year_text, ' ') into year_text 
from ... join year_group y ... 
+0

фантастическим, конечно, я бы понял, что. Вы знаете, когда не видите дерево для деревьев. Я знал, что это будет что-то простое, я просто не мог этого увидеть :) :) –

Смежные вопросы