假设我在我的Oracle数据库中有以下表格:
我想要做的是,找到每个“ID”的“终极父ID”(即行,当您基于“Parent_ID”向上递归时,您最终获得“ID = Parent_ID”的行)。
例如,345的父项是123,123的父项是234,234的父项是234(意味着它是链的顶部),因此345的终极父项是234 - 我希望这是有意义的...
因此,我的结果应如下所示:
现在,就像我之前说的那样,这是我第一次尝试这种SQL查询 - 这个查询不能正常工作(我得到了以下错误:
请帮助我或指点我正确的方向!!!
谢谢!
ID: Name: Parent_ID:
123 a 234
345 b 123
234 c 234
456 d 345
567 e 567
678 f 567
我想要做的是,找到每个“ID”的“终极父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
我刚刚了解到Oracle的Connect 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
子句,但是它的逻辑对我来说似乎是正确的。请帮助我或指点我正确的方向!!!
谢谢!
[1]: ORA-01436: CONNECT BY loop in user data
,并且在查询中突出显示了表名... 对此感到抱歉... 我现在也会更新问题。 - John BustosNOCYCLE
子句并查看结果是否符合您的预期。 - PM 77-1Parent_ID
设置为NULL
,即没有父级,可能对您有利。 - PM 77-1