Oracle - 连接表并连接到先前的

问题描述 投票:0回答:1

我有一个问题,我认为只能通过 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 为 null,第一个项目不存在 task_item)。

我的问题:

给定一个task_id 我想提取所有前面的任务

这个问题与 Philip Greenspun 对 Oracle 中的树的精彩介绍 Wikibook 的分层查询描述 中描述的问题接壤,但当这些问题包含更多 ID 和 时,似乎找不到任何好的解决方案来解决这些问题一个连接表。

我自己的 SQL-foo 严重不足,我用谷歌搜索了我的心,但没有找到解决我的特定问题的方法。

Carrie Fisher 的声音:帮助我 Stack Overflow,你是我唯一的希望。

oracle-database hierarchical-data connect-by
1个回答
0
投票

我自己没能看到的技巧是首先将所需的信息连接在一起,然后执行connect to语句。

我认为下面的代码可以解决这个问题:

    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;

内部mot SQL 构建了一个合适的parent_table。接下来使用 connect byprior 构建层次结构。最外层的 SQL 根据应用程序的要求连接其余数据。

© www.soinside.com 2019 - 2024. All rights reserved.