mysql 函数里可以使用with recursive吗
时间: 2023-12-31 07:06:05 浏览: 172
是的,MySQL 支持在函数中使用 WITH RECURSIVE 语句。但需要注意的是,函数中使用 WITH RECURSIVE 语句时,需要将整个查询语句放在一个 SELECT 语句中,并且使用 SELECT INTO 语句将查询结果赋值给变量。另外,为了避免递归查询导致死循环,需要设置好递归查询的终止条件。
以下是一个示例:
```
CREATE FUNCTION my_func() RETURNS VARCHAR(255)
BEGIN
DECLARE result VARCHAR(255);
SELECT col1 INTO result FROM (
WITH RECURSIVE cte (id, col1) AS (
SELECT id, col1 FROM my_table WHERE id = 1
UNION ALL
SELECT t.id, t.col1 FROM my_table t
JOIN cte c ON t.parent_id = c.id
)
SELECT col1 FROM cte WHERE id = 2
) AS subquery;
RETURN result;
END;
```
在上面的示例中,函数 my_func() 中使用了 WITH RECURSIVE 语句进行递归查询,并将查询结果赋值给变量 result,最后返回该变量的值。
相关问题
mysql 5.77支持 WITH RECURSIVE函数吗
MySQL 5.7版本确实支持WITH RECURSIVE函数。WITH RECURSIVE是一个用于递归查询(Recursive Common Table Expression, 简称CTE with recursion)的关键字,它允许你在SQL查询中定义一个自引用的临时表,以便对数据集进行分阶段处理,特别是当需要解决层次结构或动态计算级别的问题时非常有用。这种功能常用于分治算法、树形结构遍历等场景。
例如,你可以编写一个递归查询来获取数据库中的所有层级关联数据,而不需要事先知道所有的层级深度。但是请注意,虽然5.7版本引入了这个特性,但在某些较旧的系统或者特定配置下,可能需要启用相应选项才能使用。
mysql5.7.31使用递归函数WITH RECURSIVE报1064
MySQL 5.7.31 的确支持 WITH RECURSIVE 递归查询,但是需要满足以下条件:
1. MySQL 的 SQL 模式必须是 ANSI 模式或者类似于 ANSI 模式的模式,例如 TRADITIONAL 模式。
2. MySQL 的版本必须大于等于 8.0.1 或者是 5.7.8。
如果你的 MySQL 版本符合以上条件但是还是报 1064 错误,那么可能是你的语法有问题,你可以检查一下语法是否正确。如果还是无法解决问题,可以提供更多的错误信息和查询语句,我可以帮你进一步分析。
阅读全文