层级关系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执行完成后结果展示
    展示上级
    注意:
    需要注意的是,无论查询上级还是下级都是包含本身的,需要自行处理一下

猜你喜欢

转载自blog.csdn.net/weixin_43650254/article/details/123790038
今日推荐