我在Oracle 9i數據庫表的父子關係的Oracle 9i中得到樹的最高成員與給孩子
,如:
parent | child
1 | 2
2 | 3
2 | 4
null | 1
1 | 8
我需要從一個給定的得到絕對父兒童。 說,我有孩子4,它必須給我的父母:1
我已經看過CONNECT BY,但我找不到解決方案。
我在Oracle 9i數據庫表的父子關係的Oracle 9i中得到樹的最高成員與給孩子
,如:
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
,與child
替換parent
:
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
所以,你想要的最終母公司,不是所有的聯繫? – 2009-09-18 14:26:27
是的,沒錯。 我現在沒有在運行時有多少級別。 – jwdehaan 2009-09-24 21:47:51