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
今日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
ますが、そのロジックは正しいようです。
助けてください/正しい方向に私を向けるのを手伝ってください!!!
ありがとう!!!