You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL层级查询需求:获取层级列值并保留初始查询ID至所有结果行

如何在Oracle层级查询中保留起始节点ID

要实现将每个层级分支的起始ID(即START WITH中指定的ID)显示在对应分支的所有记录里,只需借助Oracle层级查询的CONNECT_BY_ROOT函数即可完成。

表结构与测试数据

首先是表创建和数据插入语句:

CREATE TABLE user_test (id int, parentid int);

INSERT INTO USER_TEST (ID, PARENTID) VALUES (80,40);
INSERT INTO USER_TEST (ID, PARENTID) VALUES (40,20);
INSERT INTO USER_TEST (ID, PARENTID) VALUES (20,10);
INSERT INTO USER_TEST (ID, PARENTID) VALUES (100,50);
INSERT INTO USER_TEST (ID, PARENTID) VALUES (50,25);
INSERT INTO USER_TEST (ID, PARENTID) VALUES (25,18);

修改后的查询语句

在原查询基础上添加CONNECT_BY_ROOT id作为第三列,该函数会返回当前层级树的根节点(也就是START WITH中指定的起始ID):

SELECT
    id,
    parentid,
    CONNECT_BY_ROOT id AS root_id
FROM
    user_test
START WITH
    id IN (80, 100, 50)
CONNECT BY
    PRIOR parentid = id ;

查询结果

执行上述语句后,输出将与期望一致:

50  25     50
    25  18     50 
    
    80  40     80
    40  20     80
    20  10     80
    
    100 50     100
    50  25     100
    25  18     100

说明

CONNECT_BY_ROOT是Oracle专为层级查询设计的函数,它能捕获当前行所在层级树的最顶层节点值,正好满足我们需要将起始ID关联到对应分支所有记录的需求。

内容的提问来源于stack exchange,提问作者Vinoth Karthick

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 13:15:04