发现公司代码库里面一个非常有水平(在我有限的见识里)的 SQL
层次数据库,数据库结构类似于这种,也是层次数据常用的写法了
create table t(
id int primary key comment 'id',
parent_id int comment 'parent_id'
)
目标是查找一个一个节点的全路径,例如
id,parent_id
1,0
2,1
3,1
4,1
5,2
输入参数 5 能输出
5
2
1
分享一下
SELECT T2.id
FROM (
SELECT @r AS _id,
(SELECT @r := parent_id FROM t WHERE id = _id) AS parent_id,
@l := @l + 1 AS lvl
FROM (SELECT @r := 5, @l := 0) vars,
t h) T1
JOIN t T2 ON T1._id = T2.id
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.