天天看點

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子句進行這種查詢,但它的邏輯對我來說似乎是正确的.

請幫助/幫助指出我正确的方向!

謝謝!!!