【发布时间】:2019-08-03 04:24:39
【问题描述】:
如下表
KID | CROSS_LINK | KEY | GROUP_KEY
--------|------------|--------|-----------
COR001 | | 711768 | 336406
EXP001 | | 740194 | 336406
POD002 | DPR002 | 712408 | 336406
POD003 | POD002 | 718445 | 336406
DPR001 | | 711825 | 336406
TRC001 | | 713773 | 336406
DPR002 | | 712199 | 336406
POD001 | DPR001 | 712191 | 336406
POD004 | POD001 | 815174 | 336406
POD005 | POD003 | 815181 | 336406
POD002 | DPR001 | 478800 | 475873
POD005 | POD002 | 300266 | 475873
DPR001 | | 300202 | 475873
我的sql语句是
select level lvl, kid, CONNECT_BY_ROOT CROSS_LINK as father, key, group_key
from t
start with CROSS_LINK is not null
CONNECT BY PRIOR kid = CROSS_LINK
order by GROUP_KEY
您可以将 CROSS_LINK 视为父列。 我的目标是在 GROUP_KEY 中显示 KID 的所有父亲(层次结构中的直接和间接)。
此查询不会以孤立的方式在 GROUP_KEY 内运行。您可以在 KID 'POD005' 的行为中观察到问题。在下图中,我突出显示了错误的行。
【问题讨论】:
-
为什么不
CONNECT BY PRIOR kid = CROSS_LINK AND PRIOR group_key = group_key? -
这似乎有效。我会再次检查它,并在这里提供我的反馈。谢谢
-
好的...我想也许我误解了这个问题。我会添加它作为答案。
标签: sql oracle hierarchy connect-by