2017-08-24 178 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子句中交换的条款。