2010-02-03 54 views
2

我正在尋找在一行中顯示父項和子項的最佳方法。 例子:查詢單個元素中的一個元素的父項和子項

Table A 
ID | PARENT_ID | VALUE 
============================= 
1 |    | A 
2 |  1  | B 
3 |  2  | C 
4 |    | D 
5 |  4  | E 

所以我希望得到以下結果:

ID | PARENT  | CHILD  | VALUE 
========================================= 
2 | 1   | 3  | A 
5 | 4   |   | E 

你會如何解決這個問題?

任何幫助他非常讚賞。

丹尼爾

+0

如果行有兩個孩子,會發生什麼?如果一個家庭有4代(6 - > 7 - > 8 - > 9),會發生什麼? – 2010-02-03 09:17:56

+1

您的示例輸出實際上顯示了'CHILD | PARENT | GRANCHILD' – APC 2010-02-03 09:47:56

回答

3

您可以輕鬆地做到這一點自聯接:

SQL> WITH table_a AS (
    2 SELECT 1 ID, NULL parent_id, 'A' VALUE FROM dual 
    3 UNION ALL SELECT 2, 1, 'B' FROM dual 
    4 UNION ALL SELECT 3, 2, 'C' FROM dual 
    5 UNION ALL SELECT 4, NULL, 'D' FROM dual 
    6 UNION ALL SELECT 5, 4, 'E' FROM dual 
    7 ) 
    8 SELECT children.id, children.parent_id, 
    9   grand_children.id, children.value 
10 FROM (SELECT ID, parent_id, VALUE 
11    FROM table_a 
12   WHERE LEVEL = 2 
13   CONNECT BY parent_id = PRIOR ID 
14   START WITH parent_id IS NULL) children 
15 LEFT JOIN table_a grand_children 
16   ON children.id = grand_children.parent_id; 

     ID PARENT_ID   ID VALUE 
---------- ---------- ---------- ----- 
     2   1   3 B 
     5   4   E 
+0

正是我在找什麼。非常感謝! – road242 2010-02-03 17:43:53

相關問題