【问题标题】:Oracle - junction tables and connect to priorOracle - 联结表并连接到先前
【发布时间】:2013-02-21 11:58:22
【问题描述】:

我有一个我认为只能通过 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 OracleWikibook's description of Hierarchical Queries 中描述的问题接壤的问题,但是当它们包含更多ID 和一个Junction 表时,似乎找不到任何好的解决方案来解决这些问题。

可悲的是,我自己的 SQL-foo 很短,我用谷歌搜索了我的心,但没有找到解决我特定问题的方法。

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

【问题讨论】:

  • 能否包含几行数据? [看起来您的模型中的某些信息可能是多余的]
  • 不应该是“一组项目组合成一个任务”而是“一组任务项目组合成一个任务”?
  • @phareim: 你的问题是"Given one task_id I want to extract all preceding tasks.",那为什么我们需要table TASK_ITEM AND TASK 它可以很容易地通过只有一个table ITEM 找到??
  • 在下面查看我的答案。谢谢你们的反馈,伙计们。

标签: oracle hierarchical-data connect-by


【解决方案1】:

寻找就会找到。

在一位同事的帮助下,我们解决了这个问题。

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

我认为下面的代码解决了所描述的问题。

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。接下来使用先验连接构建层次结构。最外层的 SQL 根据应用程序的需要加入其余数据。

感谢您的宝贵时间和反馈。

【讨论】:

    猜你喜欢
    • 2011-04-04
    • 2021-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多