层级关系SQL查询

众所周知,层级查询一般表中一定会有父级Id这个字段,一般用 parent_id 来表示,大部分公司为了检索的便捷一边会设有 path 字段来记录当前层级的地位,来证明当前层级所处的当前层级链中的位置。
当我们拥有当前 path 的信息的时候,想获取其所有下级的时候是比较简便的,我们只需要模糊匹配右边即可,可当我们想获取当前所有上级链的时候就会比较复杂,因为我们当前层级的上级可能会有多个下级,而我们只是当前其中一个分支,所以想获取一条链式的时候就会比较麻烦,我们也不可能根据 parent_id 重复调用数据库获取,是比较浪费资源的,接下来我展示一下如何获取。

举个栗子:

层级关系展示

# 获取当前组织所有子组织path,#{path}是咱们自己传入的参数,为了不影响整体性,用引号包了起来
SELECT path FROM organization WHERE path LIKE CONCAT('000001', '%') and deleted = 0;

# 获取当前组织所有上级组织链中的组织path,#{path}是咱们自己传入的参数,为了不影响整体性,用引号包了起来
SELECT path FROM organization WHERE '000001' LIKE CONCAT(path, '%') and deleted = 0;

上面两个sql执行的返回结果给大家展示一下:

  • 第一条SQL执行完成后结果展示
    展示下级
  • 第二条SQL执行完成后结果展示
    展示上级
    注意:
    需要注意的是,无论查询上级还是下级都是包含本身的,需要自行处理一下
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值