Oracle-连接表并连接到以前的
我有一个问题,我认为只有通过连接到前面的语句才能解决 我的数据模型简化如下:Oracle-连接表并连接到以前的,oracle,hierarchical-data,connect-by,Oracle,Hierarchical Data,Connect By,我有一个问题,我认为只有通过连接到前面的语句才能解决 我的数据模型简化如下: 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_ITE
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_项不存在)
我的问题:
给定一个任务id,我想提取前面的所有任务。
这是一个与中或中描述的问题相近的问题,但当这些问题包括更多ID和连接表时,似乎找不到解决这些问题的好方法
我自己的SQLFoo严重不足,我在谷歌上搜索了一下,没有找到解决我特定问题的方法
用嘉莉·费舍尔的声音说:帮我,你是我唯一的希望。寻找,你会找到的
在一位同事的帮助下,我们解决了这个问题
我自己还没有看到的技巧是,首先将所需信息连接在一起,然后执行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构建一个适当的父表。下一步将使用connect by Previor构建层次结构。最外层的SQL按照应用程序的要求连接其余的数据
感谢您的时间和反馈。您能提供几行数据吗?[在您的模型中似乎有些信息可能是多余的]不应该将“一组项目组合到一个任务中”改为“一组任务项目组合到一个任务中”?@phareim:您的问题是
“给定一个任务id,我想提取前面的所有任务。”
,那么为什么我们需要表格TASK\u项目和任务只需一个表格项目就可以轻松找到它??请参见下面我的答案。谢谢你们的反馈,伙计们。