此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 :=@l + 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;
整个代码执行结果:
绿色背景下所要查询的结果就是下图,父级子级区域的名称拼接:
1:这个背景
蓝色背景 整体sql语句作为表a 来查询表最终的结果,蓝色背景下的执行结果 :
拆解:
这里:@r := 110101 search 110101 是这里用到的 子集编码(输入编码)
自定义给@r
@l := 0 这里的0是初始值 这个@l是用来 看层级的
@l :=@l + 1 AS lv1 就是每向上查询一层就加一 结果是按照 lv1 倒叙排列的
@r := parent_code 这里将一开始查询到的父级节点作为子集节点 用作查询父级节点
整个语句执行的条件是 @r <> 0 AND @r <> - 1 当@r 等于0或者等于-1 的时候说明已经找到根节点 就可以结束递归查询了
绿色区域内的查询条件id 就是从蓝色区域递归查询出来的,并且排序后可以直接从最上级往下根据id查询拼接