gpt4 book ai didi

sql - 仅为更新的记录获取层次结构

转载 作者:行者123 更新时间:2023-12-04 20:49:58 24 4
gpt4 key购买 nike

我有几个包含一些资源数据的表

Resource
----------
rID | rname | updatedstamp
R1 Res1 01-Jul-2015
R2 Res2 01-Jul-2015
R3 Res3 01-Jul-2015
R4 Res4 01-Jul-2015
R5 Res5 01-Jul-2015
R15 Res15 01-Aug-2015

ResourceTree
----------
parID | rID | updatedStamp
---------------------------
NULL R1 01-Jul-2015
R1 R2 01-Aug-2015
R2 R3 01-Jul-2015
R3 R4 01-Jul-2015
R4 R5 01-Jul-2015
R14 R15 01-Jul-2015

我需要一个选择查询,它将获取在“2015 年 8 月 1 日”或之后更新的所有记录。此外,我需要获取在“2015 年 8 月 1 日”更新的任何父资源的子资源的详细信息

所以在我的例子中,我需要从 2015 年 8 月 1 日更新的资源表中获取所有记录。在我的情况下,它只会是 R15。此外,它还应该从 Resource_Tree 表中获取任何更新发生在 01-Aug-2015 或之后的详细信息。在我的例子中,它将是 R2 R3 R4 R5。

结果

parid rid rname
R14 R15 Res15
R1 R2 Res2
R2 R3 Res3
R3 R4 Res4
R4 R5 Res5

到目前为止已尝试查询

SELECT RT.ParID,R.ID,R.Rname
FROM RESOURCES R, RESOURCETREE RT
WHERE R.RID = RT.RID
And (R.UpdatedStamp >= '01-Aug-2015' or RT.UpdatedStamp >= '01-Aug-2015')
START WITH RT.ParID ='R1' AND
CONNECT BY PRIOR RT.RID=RT.ParID

最佳答案

这可能不是一个优雅的解决方案;

with temp_tbl_1 as (
-- get all the "rid" updatedstamp >= '01-Aug-2015' from both tables
select rID
from ResourceTree
where updatedstamp >= '01-Aug-2015'
union all
select rid
from Resource
where updatedstamp >= '01-Aug-2015'
),
temp_tbl_2 as (
select parID, rID
from ResourceTree
START WITH rID in (select distinct rID from temp_tbl_1)
CONNECT BY PRIOR RID = ParID
)
select t.parID, t.rID, r.rname
from temp_tbl_2 t
join Resource r
on r.rID = t.rID

关于sql - 仅为更新的记录获取层次结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31831058/

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