MySQL8
使用 with recursive
实现递归
MySQL8
with recursive
语法
WITH recursive 表名 AS (
初始语句(非递归部分)
UNION ALL
递归部分语句
)
[ SELECT| INSERT | UPDATE | DELETE]
案例
1.输出1 ~ n
WITH recursive t AS
(
SELECT 1 AS n
UNION ALL
SELECT n + 1 FROM t WHERE n < 10
)
SELECT * FROM t;
结果
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiYTMfhHLlN3XnxCM38FdsYkRGZkRG9lcvx2bjxiNx8VZ6l2cs0TPnpGRtVWa0MVZ2J1VPZHTh9UUBJUaUVkTxE1X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnLmBjMiZjZyEjN1IGOwATMiJmM4QjYzgjN3kzN4UjZwkzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
2.输出n的阶乘
WITH recursive t AS (
SELECT 1 AS n, 1 AS factorial
UNION ALL
SELECT n + 1, ( n + 1 ) * factorial FROM t WHERE n < 10
)
SELECT * FROM t;
结果
3.输出前n项和
WITH recursive t AS (
SELECT 1 AS n, 1 AS sum
UNION ALL
SELECT n + 1, n + 1 + sum FROM t WHERE n < 10
)
SELECT * FROM t;