oracle中父表和子表之间的访问路径
问题描述:
当给出table_name(T9)和column_name(C1)时,我需要找出其中有column_name(C1)的最近父表。oracle中父表和子表之间的访问路径
例如: 为T9
T9(C9,C8) -> T8(C8,C7) -> T7(C7,C1) -> T6(C1,C2) -> T5(C1,C3)
T9(C9,C11) -> X8(C11,C7) -> X7(C7,C1) -> T6(C1,C2) -> T5(C1,C3)
T9(C9,C12) -> Y8(C12,C7) -> Y7(C7,C3) -> Y6(C3,C1) -> T5(C1,C3)
T9(C9,C13) -> Z8(C13,C7) -> Z7(C7,C2) -> Z6(C2,C3) -> T5(C3,C1)
以上父表的路径是父子关系从子表T9 (读T9通过C8连接到T8等)
现在开始我需要写一个查询,应该返回
T9->T8->T7
T9->X8->X7
T9->Y8->Y7->Y6
T9->Z8->Z7->Z6->T5
我想使用all_constraints和all_cons_cols和conn通过路径找到等级关系。如果他们已经创建了这样的查询,有人可以帮助我吗?
答
如果你有一个简单的模式结构,这可能会为你工作:从this similar question修改
select access_path
from (
SELECT substr(sys_connect_by_path(a.table_name, '->'),3) as access_path, column_name
from all_cons_columns a
left join all_constraints b
on a.constraint_name = b.constraint_name
start with a.table_name = :T9
connect by nocycle prior b.constraint_name = b.r_constraint_name
order by level)
where column_name = :C1;
。
阅读关于CONNECT BY – OldProgrammer
你知道,参考约束可能在一组列上,而不仅仅是一列,对吗?你是否在考虑当你考虑你的问题? – mathguy