oracle 语法prior,sql – 递归查询语法的Oracle Connect By Prior

假设我的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父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的声明,所以对我来说这对我来说是全新的,但我想我的查询必须看起来像SOMETHING如下:

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循环,它突出显示SQL中的表名编辑),我也不知道在哪种/如何使用START WITH子句进行这种查询,但它的逻辑对我来说似乎是正确的.

请帮助/帮助指出我正确的方向!

谢谢!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值