簡體   English   中英

oracle中父表和子表之間的訪問路徑

[英]Access path between parent and child tables in oracle

當給出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並按路徑連接以查找層次結構關系。 如果有人已經創建了這樣的查詢,可以幫助我。

如果您具有簡單的架構結構,那么這可能對您有用:

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;

這個類似的問題修改。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM