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
子句中的条款。
我有一个包含 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
子句中的条款。