用sql语句把传统存储树的表,转换成节点与叶子节点对照表(oracle)

发布于 2022-09-05 21:52:46 字数 429 浏览 14 评论 0

出于某种原因(懒),想在sql中实现数据按照树形结构进行分组合计,在关联表的时候需要一个节点与对应叶子节点对照的表。所以不知道下面这个操作用sql语句能实现不,不想要函数或者存储过程这种的,那样的话我就在代码里写了。
希望将

id    pid
1    0
2    1
3    1
4    2
5    2
6    3
7    3

转换为

id    lid
1    4
1    5
1    6
1    7
2    4
2    5
3    6
3    7
4    4
5    5
6    6
7    7

另外树的表结构中还有是否是叶子节点和层级这两个字段,如果有需要的字段也可以自己加

另外本问题源于个人的求知与探索欲望,不要喷我“sql不是啥都能干的”这种

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

疧_╮線 2022-09-12 21:52:46

这种需求可用SQL的recursive with实现:

with tree(id, pid) as (
    select * from (values(1,0),(2,1),(3,1),(4,2),(5,2),(6,3),(7,3)) as tree(id, pid)),
    
result(id, lid) as (
    select id, id from tree where id not in (select pid from tree) -- first leaves
    union all -- then include parents iteratively
    select tree.pid, result.lid
    from result inner join tree on result.id = tree.id)

select * from result
order by id

以上在 MSSQL2014 运行通过。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文