龙空技术网

sql 递归查询所有子集

bettermann 820

前言:

当前兄弟们对“mysql57图标”都比较看重,我们都想要学习一些“mysql57图标”的相关文章。那么小编也在网络上收集了一些有关“mysql57图标””的相关资讯,希望各位老铁们能喜欢,你们一起来了解一下吧!

某些场景可能需要维护一些有父子关系的数据,当然代码可以实现,存储过程也可以,本文以mysql 为例,纯sql实现一下:

db:MySQL 57table:sys_areafield:area_code, area_name, parent_code  #主键,名称,父id

sql

SELECT	T2.node_level,	T3.*FROM	(		SELECT @node_id AS nodeId, ( SELECT @node_id := GROUP_CONCAT(area_code) FROM sys_area WHERE FIND_IN_SET(parent_code, @node_id)	) AS T1, @nl := @nl + 1 AS node_level		FROM sys_area, (SELECT @node_id := '110100', @nl := 0) T4 WHERE @node_id IS NOT NULL	) T2,	sys_area T3WHERE	FIND_IN_SET(T3.area_code, T2.nodeId)ORDER BY	node_level,	area_code;

结果集:

@node_id 为变量,sql 中变量以@开头;

@变量名 : 定义一个用户变量.= 对该用户变量进行赋值.用户变量赋值有两种方式: 一种是直接用"=“号,另一种是用”:=“号。使用set命令对用户变量进行赋值时,两种方式都可以使用;用select语句时,只能用”:=“方式,因为select语句中,”="号被看作是比较操作符。

2.GROUP_CONCAT:拼接函数,具体怎么用,自行百度,完整语法:

group_concat([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator '分隔符'])

3.FIND_IN_SET:查找函数

select FIND_IN_SET('2', '1,2'); 返回2select FIND_IN_SET('6', '1'); 返回0 strlist中不存在str,所以返回0。

标签: #mysql57图标