需求:在一个具有层级结构的表结构中,我需要根据一个现有的code或id向上所有的父级code或id
一开始我想直接想在代码中用递归的方法逐级向上查询一条数据,直到到达顶层之后就结束。
代码实现起来也不是很难。
后来想着能否用mysql的SQL语句来实现
需要读者知道前提知识:https://blog.youkuaiyun.com/weixin_42008966/article/details/127442510
2.1
思路:先定义一个变量 @r,默认值就是最初的code或id,用limit限制查询的次数,也可以理解为层级,新增一列,用户记录 每次查询的时候用变量值作为条件去向上查询的子查询,
select distinct dept.dept_code from (
SELECT @r AS dept_code,( SELECT @r := dept_parent_code FROM XX
WHERE dept_code =@r limit 1
) as dept_parent_code
FROM
( SELECT @r := 'A1Q3' FROM XX limit 10 ) t
)dept
where
dept_code is not null and dept_code !=''
2.2
思路:利用单表的2个父子id或code字段进行查询,数据一条条从上往下查,所以要求按照倒序的排序要有规则,不然查询结果就会不对。
SELECT
( CASE WHEN first = @r THEN first END ) AS first,
( CASE WHEN first = @r THEN @r :=second END ) AS second
FROM
(
SELECT
catalog_row_id as first,
parent_row_id as second,
@r := 162532274
FROM
t_plm_catalog_regulatory
order by catalog_row_id desc
) AS t

文章探讨了如何在具有层级关系的数据库表中,通过SQL语句而不是递归方法,查找某个code或id的所有上级。提出了两种思路,一种是利用变量和子查询,另一种是基于两个父子id字段的倒序查询。这两种方法都需要考虑查询的层级限制和排序规则。
675

被折叠的 条评论
为什么被折叠?



