首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
Coding
V2EX  ›  问与答

求教一个查询上下级关系的 SQL

  •  
  •   thisisgpy · 227 天前 · 962 次点击
    这是一个创建于 227 天前的主题,其中的信息可能已经有所发展或是发生改变。

    组织编号使用层级方式,比如总公司是 0001,分公司是 00010100,分公司部门是 000101000010。

    每一级都使用直接上级的编号并加上本级编号。

    现在给定任意一个部门编号,查询出他本身及其所有上级,请问 SQL 该怎么编写呢?

    数据库是 MySQL。

    先谢过各位大佬解惑。

    9 回复  |  直到 2019-04-28 18:27:38 +08:00
        1
    linauror   227 天前
    既然编号这么有规律,程序先直接按长度取编号,可以确定出上级编号及上上级编号...,再去查呢
        2
    thisisgpy   227 天前
    @linauror 我现在就是在程序里面分析出所有编号去查,但是我想尝试直接在 SQL 层面解决。
        4
    liprais   227 天前
    mysql 做不到
    需要使用 recursive cte
        5
    chenset   227 天前
    层数确定不是直接 join/left join 就可以了吗?

    表结构是: 父节点 ID(parent_id), 节点 ID(id)

    select * from company c1 join company c2 on c1.id = c2.parent_id where c2.id = XXX;

    表结构不同,就不晓得了. 或者改表结构.
        6
    youyaang   227 天前
    SELECT MID(id, LENGTH(id)-4, LENGTH(id)) AS LastLvId FROM DB_xx;

    没测试过,不知道能不能用=。=
        7
    xinyewdz   227 天前
    慎用 join 操作
        8
    littlewing   227 天前
    不管怎样都是全表扫描
    所以为什么不把层级关系存起来呢
        9
    xxxy   227 天前
    我有一个简单的方法。用程序串行去查询。
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   978 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 22ms · UTC 21:54 · PVG 05:54 · LAX 13:54 · JFK 16:54
    ♥ Do have faith in what you're doing.