MYSQL8.0 WITH RECURSIVE递归查询

MYSQL 8.0 版本以上 使用 WITH RECURSIVE 实现递归

注意:写法比较简单,也比较灵活,但是只适用于MySQL8.0及以上版本,这种写法其实和  PostgreSQL 的写法是一样的。

WITH RECURSIVE 语法

WITH recursive 表名 AS ( 
	初始语句(非递归部分) 
	UNION ALL 
	递归部分语句
)
[ SELECT| INSERT | UPDATE | DELETE]

with recursive 由两部分组成。第一部分是非递归部分( union all 上方),第二部分是递归部分(union all下方)。递归部分第一次进入的时候使用非递归部分传递过来的参数,也就是第一行的数据值,进而得到第二行数据值,然后根据第二行数据值得到第三行数据值。

用法示例

定义下面这样的表,存储每个区域(省、市、区)的 id,名字及上级区域的 pid

create table tb(id varchar(3) , pid varchar(3) , name varchar(10)); 
 
insert into tb values('002' , 0 , '浙江省'); 
insert into tb values('001' , 0 , '广东省'); 
insert into tb values('003' , '002

你可能感兴趣的:(MYSQL8.0 WITH RECURSIVE递归查询)