假設我的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子句進行這種查詢,但它的邏輯對我來說似乎是正确的.
請幫助/幫助指出我正确的方向!
謝謝!!!