mysql 逆向查询树状结构

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

需求:在一个具有层级结构的表结构中,我需要根据一个现有的code或id向上所有的父级code或id

  1. 一开始我想直接想在代码中用递归的方法逐级向上查询一条数据,直到到达顶层之后就结束。

代码实现起来也不是很难。

  1. 后来想着能否用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

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值