Имя вашего параметра функции - id
, но у вас также есть столбец id
в вашей таблице пользователей, и, возможно, в вашей таблице meeting_participants также есть столбец id
.
Это создает двусмысленность. Выражение не знает, имеете ли вы в виду столбец id
или параметр функции id
.
Вы должны дать своему параметру функции отдельное имя, чтобы устранить неоднозначность.
CREATE FUNCTION get_participantes (_id INT) RETURNS VARCHAR(50)
READS SQL DATA
BEGIN
DECLARE par VARCHAR(50) DEFAULT "";
(select GROUP_CONCAT(mail SEPARATOR ',') INTO par from users where id IN (
select user_id from meeting_participants where meeting_id = _id));
RETURN par;
END
Пара других вопросов, о которых вам следует знать, даже если они не связаны с вашим вопросом:
В подпрограммах MySQL (в отличие от SQL Server, например) ваша локальная переменная par
отличается от переменной сеанса @var
. Ваш код в этом конкретном случае будет работать, но, возможно, некоторые другие функции, которые вы пишете, будут сбиты с толку. Смотрите также мой ответ на символ "@" в хранимой процедуре?
Вы должны добавить к своей функции пункт READS SQL DATA
, иначе вы можете получить эту ошибку (как я делал, когда проверял вашу функцию):
ОШИБКА 1418 (HY000): эта функция не имеет DETERMINISTIC, NO SQL или READS SQL DATA в своем объявлении, и двоичное ведение журнала включено (вы можете захотите использовать менее безопасную переменную log_bin_trust_function_creators)