查询部门下的所有下级部门

with Dept as(
    select id,departmentname,supdepid from hrmdepartment  where id='19'
    union all
    select HrmDept.id,HrmDept.departmentname,HrmDept.supdepid from hrmdepartment HrmDept,Dept  
    -- 当前部门所有下级  
    where HrmDept.supdepid=Dept.id
    -- 当前部门所有上级 where T.supdepid=D.id
)
select * from Dept

 

### 非递归查询下级部门的工具类或实现方法 为了提高系统的灵活性和可维护性,可以采用迭代而非递归来遍历树状结构的数据[^1]。对于数据库中的层级关系数据查询,可以通过构建辅助表来存储路径信息,从而简化查询过程。 #### 方法一:使用路径枚举法 这种方法涉及预先计算并保存每个节点到根节点的完整路径,在查询时只需简单地匹配字符串即可获取所有子节点的信息。具体操作如下: ```sql WITH path_enum AS ( SELECT dept_id, dept_name, CAST(dept_id AS CHAR(100)) AS path FROM sys_company WHERE parent_id IS NULL OR parent_id = '' UNION ALL SELECT child.dept_id, child.dept_name, CONCAT(parent.path, ',', child.dept_id) FROM sys_company AS child INNER JOIN path_enum AS parent ON child.parent_id = parent.dept_id ) SELECT * FROM path_enum; ``` 此 SQL 片段展示了如何利用 `WITH` 子句创建一个临时视图 `path_enum` 来记录从根节点到各个叶子结点之间的路径[^2]。当需要查找某个特定部门及其所有的下属部门时,可以根据该部门ID所在的路径快速定位目标记录集。 #### 方法二:借助外部程序语言编写服务端逻辑 除了纯SQL解决方案外,还可以考虑在应用层面上解决问题。例如,在 Java 后端开发环境中,可以定义一个专门用于处理此类需求的服务接口,并在其内部实现广度优先搜索算法(BFS),以非递归的方式完成对整个组织架构图的遍历工作。 ```java import java.util.*; public class DepartmentService { public List<Department> getSubDepartments(String rootDeptId) { Map<String, Department> map = new HashMap<>(); Queue<String> queue = new LinkedList<>(); // 假设已经加载好了所有部门信息至map中... queue.offer(rootDeptId); while (!queue.isEmpty()) { String currentId = queue.poll(); Department department = map.get(currentId); for (String subDeptId : department.getChildrenIds()) { queue.offer(subDeptId); // 将子部门加入队列等待处理 } // 处理当前部门... } return result; // 返回最终的结果集合 } } ``` 上述代码片段提供了一个基于 BFS 的框架,适用于那些希望减少数据库负载的应用场景。它允许一次性读取所有必要的数据进入内存空间内进行高效的操作[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值