我遇到的问题是我认为只能通过Connect-to-prior语句解决。
我的数据模型简化如下:
create table TASK
( TASK_ID number
);
create table ITEM
( TASK_ID number,
NEXT_TASK_ID number
);
create table TASK_ITEM
( TASK_ID number,
ITEM_ID number
);
将一组项目合并为一项任务。任务集合组合成一个或多个项目(这是TASK_ITEM联结表的来源)。该过程以一组项开始,以一个项结束(对于最后一项,ITEM.NEXT_TASK_ID为空,并且第一项不存在task_item)。
我的问题:
鉴于一个task_id 我想提取所有前面的任务。
这是一个与Philip Greenspun's excellent introduction to trees in Oracle或Wikibook's description of Hierarchical Queries中描述的问题接近的问题,但是当它们包含更多ID和Junction表时,似乎无法找到解决这些问题的任何好解决方案。
我自己的SQL-foo遗憾地缩短了,而且我在没有找到解决我特定问题的方法的情况下搜索了我的心脏。
在Carrie Fisher的声音中:帮助我Stack Overflow,你是我唯一的希望。
答案 0 :(得分:0)
寻求,你会发现。
在同事的帮助下,我们对此进行了整理。
我自己没有想到的诀窍是首先将所需信息加入,然后然后执行连接到 -statement。
我认为下面的代码解决了所描述的问题。
select parent_task.*
from (
select parent_task_id, item_id, task_id, level
from (
select
task.task_id parent_task_id,
task_item.item_id,
item.task_id task_id
from
task, task_item, item
where
task_item.task_id = task.task_id
and
item.item_id = task_item.item_id) properly_structured_parent_table
start with task_id = :TASK_ID
connect by prior parent_task_id = task_id
) task_hierarchy, task parent_task
where parent_task.task_id = task_hierarchy.task_id;
内部的SQL构建了一个合适的parent_table。下一步使用 connect by prior 构建层次结构。最外层的SQL根据应用程序的需要加入其余数据。
感谢您的时间和反馈。