达梦数据库中如何使用START WITH和CONNECT BY 根据子节点查询上级节点
时间: 2024-09-13 16:16:43 浏览: 17
在达梦(DM)数据库中,`START WITH` 和 `CONNECT BY` 是用于实现级联查询(Hierarchical Query),通常用于处理树形结构数据,如组织架构、目录系统等。当你想要从底层子节点开始向上查找其直接或间接的父节点时,可以使用这两个关键字。
下面是一个基本的示例,假设有一个部门表(DEPARTMENTS)有ID, PARENT_ID(父部门ID)字段,你可以这样做:
```sql
WITH RECURSIVE department_tree (dept_id, parent_dept_id, level)
AS
(
SELECT d.dept_id, d.parent_dept_id, 1
FROM departments d
START WITH d.parent_dept_id IS NULL -- 查询根部部门
CONNECT BY PRIOR d.dept_id = d.parent_dept_id -- 连接条件:当前记录的父ID等于上一条记录的ID
)
SELECT dept_id, parent_dept_id, level
FROM department_tree;
```
在这个例子中,
- `START WITH d.parent_dept_id IS NULL` 指定了查询起点,即没有父部门的部门(也就是顶级部门)。
- `CONNECT BY PRIOR d.dept_id = d.parent_dept_id` 是递归连接条件,每次循环都检查前一行的parentDeptId是否等于当前行的deptId,如果匹配则继续向上级部门查询,形成递归。
运行这个查询会返回每个部门及其相应的层级信息,包括上级部门ID。