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

标签 sql oracle select

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

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/

相关文章:

python - 使用 Flask 进行 POST 后,选择选项保持选中状态

mysql - #1062 - key '0' 的重复条目 'username_clean'

sql - postgreSQL - 计算虚拟表中的数量

.net - Oracle SQLPLUS 是否有 .Net 接口(interface)?

MYSQL - 条件Where语句

sql - Oracle sql中的if语句

mysql - VB 应用程序搜索 MySQL 数据库以获取登录凭据

sql - 左外连接与嵌套聚合选择查找表中最新行的好处是什么?

java - Oracle 11g 和数据库连接

sql-server - SQLFiddle 坏了吗? Oracle、SQL Server 的错误...?