oracle sql 查询层次结构查询以查找顶层

oracle sql query hierarchicle query to find top level

我有一个包含 ID 列、ID_child 列和几个事实字段的 oracle table。我知道一个 ID,我想找到它的顶级父级。我知道的 id 会放入 ID_child 字段,而 ID 将是它的父级。 这个查询有效,但我只得到一行,我可以用常规 sql 查询来完成。 如何获取最高ID?

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

例如: 按事项连接的顺序; parent 需要在左侧。

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;

How do I get the top 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 子句中的条款。