使用sql @函数 自定义函数 根据子集递归查询父级节点

此sql 用于 查询省市县的递归查询和名称字段拼接

sql整理后 :

SELECT

group_concat(

( SELECT area_name from t_area WHERE area_code = a.id ) SEPARATOR ' / '

) areaName

FROM

(

SELECT

@r AS id,

( SELECT @r := parent_code FROM t_area WHERE area_code = id ) AS parent_code,

@l :[email protected] + 1 AS lv1

FROM

( SELECT @r := 110101 search, @l := 0 ) vars, t_area h

WHERE @r <> 0 AND @r <> - 1 ORDER BY lv1 DESC

) a;

使用sql @函数 自定义函数 根据子集递归查询父级节点

整个代码执行结果:

绿色背景下所要查询的结果就是下图,父级子级区域的名称拼接:

使用sql @函数 自定义函数 根据子集递归查询父级节点

1:这个背景

蓝色背景 整体sql语句作为表a 来查询表最终的结果,蓝色背景下的执行结果 :

 

使用sql @函数 自定义函数 根据子集递归查询父级节点

拆解:

这里:@r := 110101 search 110101 是这里用到的 子集编码(输入编码)

自定义给@r

@l := 0 这里的0是初始值 这个@l是用来 看层级的

@l :[email protected] + 1 AS lv1 就是每向上查询一层就加一 结果是按照 lv1 倒叙排列的

@r := parent_code 这里将一开始查询到的父级节点作为子集节点 用作查询父级节点

 

整个语句执行的条件是 @r <> 0 AND @r <> - 1 当@r 等于0或者等于-1 的时候说明已经找到根节点 就可以结束递归查询了

 

绿色区域内的查询条件id 就是从蓝色区域递归查询出来的,并且排序后可以直接从最上级往下根据id查询拼接