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

2019-04-28 10:37:37 +08:00
 thisisgpy

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

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

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

数据库是 MySQL。

先谢过各位大佬解惑。

2548 次点击
所在节点    问与答
9 条回复
linauror
2019-04-28 11:07:31 +08:00
既然编号这么有规律,程序先直接按长度取编号,可以确定出上级编号及上上级编号...,再去查呢
thisisgpy
2019-04-28 11:11:14 +08:00
@linauror 我现在就是在程序里面分析出所有编号去查,但是我想尝试直接在 SQL 层面解决。
imicksoft
2019-04-28 11:15:16 +08:00
liprais
2019-04-28 11:15:52 +08:00
mysql 做不到
需要使用 recursive cte
chenset
2019-04-28 11:18:19 +08:00
层数确定不是直接 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;

表结构不同,就不晓得了. 或者改表结构.
youyaang
2019-04-28 11:20:21 +08:00
SELECT MID(id, LENGTH(id)-4, LENGTH(id)) AS LastLvId FROM DB_xx;

没测试过,不知道能不能用=。=
xinyewdz
2019-04-28 12:23:33 +08:00
慎用 join 操作
littlewing
2019-04-28 13:16:47 +08:00
不管怎样都是全表扫描
所以为什么不把层级关系存起来呢
xxxy
2019-04-28 18:27:38 +08:00
我有一个简单的方法。用程序串行去查询。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/559387

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX