我有一个函数如下:
DELIMITER $$
DROP FUNCTION IF EXISTS `vmtest`.`hello2`$$
CREATE DEFINER = `root`@`localhost` FUNCTION `vmtest`.`hello2` (s CHAR(20))
RETURNS TEXT
BEGIN
DECLARE RETURNID INTEGER;
DECLARE RETURNNAME TEXT;
DECLARE PARENTID INTEGER;
DECLARE RTN TEXT;
DECLARE RTNNAME TEXT;
SET RTN = "";
SET PARENTID = s;
WHILE PARENTID > 0 DO
SELECT
t1.category_parent_id INTO RETURNID,
t2.category_name INTO RETURNNAME
FROM e255g_virtuemart_category_categories AS t1
INNER JOIN e255g_virtuemart_categories_de_de AS t2 on t1.id = t2.virtuemart_category_id
WHERE t1.id = PARENTID;
IF RETURNID >0 THEN
IF RTN ="" THEN
SET RTN = RETURNID;
ELSE
SET RTN = CONCAT(RTN, ',', RETURNID);
SET RETURNNAME = CONCAT(RTNNAME, ',', RETURNNAME);
END IF;
END IF;
SET PARENTID = RETURNID;
END WHILE;
RETURN RETURNNAME;
END$$
DELIMITER ;
我尝试在函数中使用联接查询,但它给了我错误,如下所示:
Error in query (1327): Undeclared variable: t2
请帮忙
最佳答案
它对多个 INTO
变量有点敏感。它只是:
DELIMITER $$
DROP FUNCTION IF EXISTS `vmtest`.`hello2`$$
CREATE DEFINER = `root`@`localhost` FUNCTION `vmtest`.`hello2` (s CHAR(20))
RETURNS TEXT
BEGIN
DECLARE RETURNID INTEGER;
DECLARE RETURNNAME TEXT;
DECLARE PARENTID INTEGER;
DECLARE RTN TEXT;
DECLARE RTNNAME TEXT;
SET RTN = "";
SET PARENTID = s;
WHILE PARENTID > 0 DO
SELECT
t1.category_parent_id,t2.category_name INTO RETURNID,RETURNNAME
FROM e255g_virtuemart_category_categories AS t1
INNER JOIN e255g_virtuemart_categories_de_de AS t2
on t1.id = t2.virtuemart_category_id
WHERE t1.id = PARENTID;
IF RETURNID >0 THEN
IF RTN ="" THEN
SET RTN = RETURNID;
ELSE
SET RTN = CONCAT(RTN, ',', RETURNID);
SET RETURNNAME = CONCAT(RTNNAME, ',', RETURNNAME);
END IF;
END IF;
SET PARENTID = RETURNID;
END WHILE;
RETURN RETURNNAME;
END$$
DELIMITER ;
所以它是...INTO var1,var2,...
关于mysql - 如何使用 join 到 mysql 函数中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38745548/