gpt4 book ai didi

sql - 如何查询(几乎)树结构

转载 作者:搜寻专家 更新时间:2023-10-30 23:07:33 25 4
gpt4 key购买 nike

嗨,我有这张 table :

id   replacement id
1 2
2 1
2 3
3 2
2 4
4 2
10 11
11 10

id(objects) 是树形结构,但表的设计不适合树形结构。节点之间的连接是双向的。

确定一个人是否是另一个人的 parent 的唯一方法是这张表:

id  valid_until
1
2 2014-01-01
3 2013-01-01
4 2013-01-01
10
11 2014-01-01

2 是 3 和 4 的父节点,因为它的 valid_until 晚于 3 和 4。1 是顶级节点,因为它仍然有效。

我正在努力编写此数据的查询,因此它看起来像这样:

id  parent
1
2 1
3 2
4 2

有没有办法将其作为单个查询,或者我是否必须为此创建一个过程和一个临时 View ?

编辑:我在表格中添加了一些新行。所以基本上我还想在查询中说我只想要 id: 1,2,3 或 4 的树而不是 10 和 11。我该怎么做?

最佳答案

此答案回答了仅获取属于特定根节点的记录的后续问题:

select id, parent_id, level
from (
select aid id, case when adate = to_date('9999','yyyy') then null else rid end parent_id
from (select
c.aid,
c.rid,
c.adate,
nvl(b.d,to_date('9999','yyyy')) bdate from (select a.id aid, a.rid rid, nvl(d,to_date('9999','yyyy')) adate from a, b where a.id = b.id) c, b where c.rid = b.id
) where adate < bdate or adate = to_date('9999','yyyy')
)
START WITH id =1 -- ID of the ROOT node
connect by prior id = parent_id
order by id

关于sql - 如何查询(几乎)树结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24774567/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com