我有几张表和一些资源数据
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
我需要一个选择查询,它将获取在'01 -Aug-2015'之后或之后更新的所有记录。另外,我需要获取在'01 -Aug-2015'
上更新的任何父级子资源的详细信息所以在我的情况下,我需要从2015年8月1日更新的资源表中获取所有记录。就我而言,它只是R15。 此外,它还应该从Resource_Tree表中获取详细信息,其中任何更新发生在2015年8月1日或之后。在我的情况下,它将是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
答案 0 :(得分:0)
这可能不是一个优雅的解决方案;
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
答案 1 :(得分:0)
with x as (
select rid from ResourceTree
where updatedstamp >= '01-Aug-2015'
union
select rid from Resourc
where updatedstamp >= '01-Aug-2015'
)
select r.parid, r.rid, re.rname
from ResourceTree r
left join x on r.parid = x.rid
left join Resourc re on re.rid = r.rid
where r.parid is not null
您在rid
之后的01年8月1日之后选择cte
,然后在ResourceTree表上加入其他表格。