Oracle 分层查询 - 如何从选定的节点开始

Oracle Hierarchical query - how to start with selected node

我正在尝试为以下内容编写分层查询 table 但无法以我需要的格式获取数据..

这是table中的数据:

+--------+------------+------------+
| ITEM_ID | FATHER_ID |说明 |
+--------+------------+------------+
| 1019 | 1018| 4 级 |
| 1018| 1010 | 3 级 |
| 1010 | 2 | 2 级 |
| 2 | 0 |一级 |
+--------+------------+------------+

这是我在大量谷歌搜索后得出的查询:

SELECT
SYS_CONNECT_BY_PATH(DESCRIPTION, '\') AS "Path"
FROM
STRUCTURE
START WITH ITEM_ID = 1019
CONNECT BY PRIOR FATHER_ID = ITEM_ID

我得到的输出是:

+----------------------------+
| \4 级 |
| \等级4\Level 3 |
| \级别 4\Level 3\Level 2 |
| \级别 4\Level 3\Level 1 |
| \级别 4\Level 3\Level 1\ |
+----------------------------+

但是如何得到这样的东西(只有一行):

\Level 1\Level 2\Level 3\Level 4

我的查询中缺少什么?

您需要了解关卡的根源,并按照评论中的建议过滤您想要的 item_id。您还反转了 connect by 语句。您问题的正确查询是:

 SELECT SYS_CONNECT_BY_PATH(description, '\') AS Path
   FROM STRUCTURE
  WHERE ITEM_ID = 1019
CONNECT BY PRIOR ITEM_ID = FATHER_ID
  START WITH FATHER_ID = 0;

但是如果你不知道关卡的最后一项,就这样做:

 SELECT SYS_CONNECT_BY_PATH(description, '\') AS Path
   FROM STRUCTURE
  WHERE ITEM_ID = (select max(item_id) from STRUCTURE)
CONNECT BY PRIOR ITEM_ID = FATHER_ID
  START WITH FATHER_ID = 0;

但请注意,第二个查询仅针对已订购的模型,最后一级是最后一级。

SQLFiddle

上查看