假设我的 oracle DB 中有下表:
ID: Name: Parent_ID:
123 a 234
345 b 123
234 c 234
456 d 345
567 e 567
678 f 567
而我想做的是找到,对于每ID
一个ULTIMATE parent ID
(描述为行,当你上升时,递归地,基于Parent_ID
你最终得到那个的行ID = Parent_ID
)。
因此,例如,345 的父级是 123,123 的父级是 234,234 的父级是 234(意味着它是链的顶部),因此 345 的最终父级是 234 - 我希望这是有道理的......
所以,我的结果应该如下所示:
ID: Name: Ult_Parent_ID: Ult_Parent_Name:
123 a 234 c
345 b 234 c
234 c 234 c
456 d 234 c
567 e 567 e
678 f 567 e
我今天刚刚发现了 OracleConnect By
语句,所以这对我来说是全新的,但我想我的查询必须如下所示:
SELECT ID, Name, Parent_ID as Ult_Parent_ID,
(SELECT Name from MyTable t2 WHERE t2.ID = t1.Parent_ID) as Ult_Parent_Name
FROM MyTable t1
CONNECT BY PRIOR Parent_ID = ID;
现在,就像我说的,这是我第一次尝试这种 SQL -这不起作用(我收到以下错误[1]: ORA-01436: CONNECT BY loop in user data
,它在 SQL 编辑器中突出显示表名),我也不知道在哪里/如何START WITH
对这种查询使用该子句,但它的逻辑对我来说似乎是正确的。
请帮助/帮助我指出正确的方向!!!
谢谢!!!