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;
但请注意,第二个查询仅针对已订购的模型,最后一级是最后一级。
上查看
我正在尝试为以下内容编写分层查询 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;
但请注意,第二个查询仅针对已订购的模型,最后一级是最后一级。
上查看