直接生成连续的数字
WITH recursive a (x) AS
( SELECT 1
UNION ALL
SELECT x + 1 FROM a WHERE x < 10 )
SELECT * FROM a;
层级查询
测试数据示例
图形展示如下
数据库数据如下
id | name | parent_id |
---|---|---|
1 | a | |
2 | b | 1 |
3 | c | 1 |
4 | d | 2 |
5 | e | 3 |
6 | f | 3 |
WITH RECURSIVE a(id,name,parent_id,path) AS
(
SELECT
id,name,parent_id,name as path
FROM
test1
UNION ALL
SELECT
a.id,a.name,b.parent_id,concat(b.name,"->",path) as path
FROM
a,test1 b
WHERE
a.parent_id is not null
and
a.parent_id=b.id
)
SELECT id,name,path FROM a where parent_id is null;
--上面这种方式从底层出发,往上层找,直到找到parent_id为空的记录,复杂度比较高
--下面的sql从最高级往下找,执行速度比上面的sql要快
WITH RECURSIVE a(id, NAME, parent_id, path) AS (
SELECT
id,
NAME,
parent_id,
NAME AS path
FROM
test1
WHERE
parent_id IS NULL UNION ALL
SELECT
b.id,
b.NAME,
b.parent_id,
concat( a.path, "->", b.NAME ) AS path
FROM
a,
test1 b
WHERE
a.id = b.parent_id
) SELECT
id,
NAME,
parent_id,
path
FROM
a;