2017-08-24 147 views
0

我有一個包含ID列,ID_child列和幾個事實字段的oracle表。我知道一個ID,我想找到它的頂級父母。我知道的ID會放入ID_child字段,ID就是它的父級。 此查詢工作,但我只能得到一行,我可以做一個常規的SQL查詢。 如何獲得頂級ID?oracle sql查詢頂層查詢層次結構查詢

SELECT 
item_tbl.id, item_tbl.id_child 
FROM item_tbl 
START WITH item_tbl.id_child = 12510646 
CONNECT BY PRIOR item_tbl.id_child = item_tbl.id 

結果我得到:

ID    ID_CHILD 
12512162   12510646 
+0

顛倒connect by語句。你有:'CONNECT BY PRIOR item_tbl.id_child = item_tbl.id'把它改爲'CONNECT BY PRIOR = item_tbl.id = item_tbl.id_child'在connect by;訂單很重要!您可以按級別降序添加級別和順序以查看父級或子級別,或者使用連接方式中的其他方法查看路徑。 – xQbert

+0

這工作**我扭轉了它,現在我得到每個級別的頂部。 –

回答

0

例如: 訂購連接通過的事項;父母需要在左側。

With item_tbl (ID, ID_CHILD) as 
(SELECT 1,2 from dual UNION ALL 
SELECT 2,3 from dual UNION ALL 
SELECT 3,4 from dual) 
SELECT 
item_tbl.id, item_tbl.id_child, level 
FROM item_tbl 
START WITH item_tbl.id_child = 4 
CONNECT BY PRIOR item_tbl.id= item_tbl.id_child 
Order by level desc; 
+0

非常感謝您的幫助。我終於得到了一個分層查詢來給我結果,我工作或我理解。 –

0

我如何讓高層ID?

可以使用CONNECT_BY_ISLEAF虛列:

SELECT id, id_child 
FROM item_tbl 
WHERE CONNECT_BY_ISLEAF = 1 
START WITH id_child = 12510646 
CONNECT BY PRIOR id = id_child 

如果不工作,然後嘗試CONNECT BY子句中交換的條款。