Oracle 9iは、指定された子を持つツリーの最上位メンバーを取得します
-
22-07-2019 - |
質問
Oracle 9iデータベーステーブルに親子関係があります
like:
parent | child
1 | 2
2 | 3
2 | 4
null | 1
1 | 8
指定された子から絶対的な親を取得する必要があります。 たとえば、子4があり、親を提供する必要があります:1
すでにCONNECT BYに注目しましたが、解決策が見つかりません。
解決
CONNECT BYクエリを使用して親のリストを作成し、フィルタリングすることができます:
SQL> WITH tree AS (
2 SELECT 1 parent_id, 2 child_id FROM DUAL
3 UNION ALL SELECT 2 , 3 FROM DUAL
4 UNION ALL SELECT 2 , 4 FROM DUAL
5 UNION ALL SELECT null, 1 FROM DUAL
6 UNION ALL SELECT 1 , 8 FROM DUAL
7 )
8 SELECT child_id
9 FROM (SELECT *
10 FROM tree
11 CONNECT BY PRIOR parent_id = child_id
12 START WITH child_id = 4)
13 WHERE parent_id IS NULL;
CHILD_ID
----------
1
他のヒント
SELECT parent
FROM (
SELECT parent
FROM (
SELECT parent, level AS l
FROM mytable
START WITH
child = 4
CONNECT BY
child = PRIOR parent
)
ORDER BY
l DESC
)
WHERE rownum = 1
これにより、 NULL
が絶対親として提供されます。
1
が必要な場合は、 parent
を child
に置き換えます:
SELECT child
FROM (
SELECT child
FROM (
SELECT child, level AS l
FROM mytable
START WITH
child = 4
CONNECT BY
child = PRIOR parent
)
ORDER BY
l DESC
)
WHERE rownum = 1
所属していません StackOverflow