【问题标题】:Access path between parent and child tables in oracleoracle中父子表之间的访问路径
【发布时间】:2017-09-14 05:53:45
【问题描述】:

当给定 table_name (T9) 和 column_name (C1) 时,我需要找出其中包含 column_name (C1) 的最近父表。

例如: 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 并通过路径连接来查找层次关系。如果他们已经创建了这样的查询,有人可以帮助我吗?

【问题讨论】:

  • 阅读CONNECT BY
  • 您知道引用约束可能在一组列上,而不仅仅是一个列,对吧?当您考虑您的问题时,您是否考虑过这一点?

标签: sql oracle hierarchical-data recursive-query connect-by


【解决方案1】:

如果您有一个简单的架构结构,这可能适合您:

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;

修改自this similar question

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-03
    • 2018-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-11
    相关资源
    最近更新 更多