当前位置: 代码迷 >> Oracle开发 >> 问一个关于树节点查询的话语。
  详细解决方案

问一个关于树节点查询的话语。

热度:43   发布时间:2016-04-24 06:42:16.0
问一个关于树节点查询的语句。。
WBS表  有 wbsid ,parentid
TASK表  有 taskid  , wbsid

WBS下面有子WBS

子WBS 下面有 TASK

TASK是最底层节点

TASK表里有时间信息

我要查 一个 WBS 节点  下面 所有TASK  的 最大时间。。

关键是要找出来 这个WBS 下的 所有子WBS 下的TASK 。。。

请大神帮忙写下呗?
------解决方案--------------------
引用:
WBS表  有 wbsid ,parentid
TASK表  有 taskid  , wbsid

WBS下面有子WBS

子WBS 下面有 TASK

TASK是最底层节点

TASK表里有时间信息

我要查 一个 WBS 节点  下面 所有TASK  的 最大时间。。

关键是要找出来 这个WBS 下的 所有子WBS 下的TASK 。。。

请大神帮忙写下呗?

也不知道是不是你想要的,你最后能够通过简单的数据来描述你想要的结果:

with WBS AS
 (select 1 wbsid, null parentid
    from dual
  union all
  select 2 wbsid, 1 parentid
    from dual
  union all
  select 3 wbsid, 2 parentid
    from dual
  union all
  select 4 wbsid, 3 parentid
    from dual
  union all
  select 5 wbsid, 4 parentid from dual),
task as
 (select 10 taskid, 1 wbsid
    from dual
  union all
  select 20 taskid, 2 wbsid
    from dual
  union all
  select 30 taskid, 3 wbsid
    from dual
  union all
  select 40 taskid, 4 wbsid
    from dual
  union all
  select 50 taskid, 5 wbsid from dual)
select *
  from task,
       (select *
          from wbs
         start with wbsid = 3
        connect by parentid = prior wbsid) t1
 where task.wbsid = t1.wbsid;

------解决方案--------------------
引用:
WBS表  有 wbsid ,parentid
TASK表  有 taskid  , wbsid

WBS下面有子WBS

子WBS 下面有 TASK

TASK是最底层节点

TASK表里有时间信息

我要查 一个 WBS 节点  下面 所有TASK  的 最大时间。。

关键是要找出来 这个WBS 下的 所有子WBS 下的TASK 。。。

请大神帮忙写下呗?

SELECT MAX(TASK表中的时间)
  FROM (SELECT WBSID
          FROM WBS
         START WITH WBSID = 你要查询的WBSID
        CONNECT BY PARENTID = PRIOR WBSID) WBS,
       TASK
 WHERE WBS.WBSID = TASK.WBSID(+)

------解决方案--------------------
用wbsid=1为例子,查找父节点wbsid为1的任务的最大时间日期(其他的类型类似):
wbs数据:

task数据:


select c.parentid, max(c.task_date)
  from (select b.taskid, a.wbsid, a.parentid, b.task_date
          from (select wbsid, parentid from wbs where parentid = 1) a,
               task b
         where a.wbsid = b.wbsid) c
 group by c.parentid;

运行结果:
  相关解决方案