查询所有子节点
SELECT *
FROM district
START WITH NAME ='巴中市'
CONNECT BY PRIOR ID=parent_id
查询所有父节点
SELECT *
FROM district
START WITH NAME ='平昌县'
CONNECT BY PRIOR parent_id=ID
Oracle SQL递归查询实现层级列的方法
在Oracle中实现递归查询并添加层级列,主要使用CONNECT BY
语法结合LEVEL
伪列,也可以通过WITH
子句(公共表表达式)优化结构。以下是具体实现方法和示例:
方法1:传统CONNECT BY
语法
SELECT
LEVEL AS 层级,
id,
parent_id,
name
FROM department
START WITH parent_id IS NULL -- 定义根节点条件
CONNECT BY PRIOR id = parent_id -- 定义父子关系
ORDER SIBLINGS BY name; -- 按兄弟节点排序
- 核心语法说明:
LEVEL
:Oracle内置伪列,自动生成当前节点的层级(根节点为1)。START WITH
:指定递归的起始条件(根节点)。CONNECT BY PRIOR
:定义父子关系,PRIOR
表示父节点的字段。
查询出层级最大的数据
"SELECT DMMC ,dmbs,max(grade) as maxlevel FROM (\n" +
"SELECT LEVEL grade,DMMC ,dmbs\n" +
"FROM gg_dmnr\n" +
"START WITH dmbs = ? \n" +
"CONNECT BY PRIOR fjd=ID\n" +
") GROUP BY DMMC ,dmbs\n" +
"ORDER BY maxlevel DESC"