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

MySQL 8.0.6递归查询如何从层级结果中排除无下属的叶子节点

解决方案

你只需要在原有递归CTE的最终查询逻辑中,增加EXISTS条件过滤掉无直接下属的叶子节点即可,同时注意修正原有递归逻辑中拼接路径的字段笔误(原代码误用了不存在的employee_first_name/employee_last_name字段,替换为表中实际的u_name字段)。

修改后的完整查询如下:

WITH RECURSIVE cte_connect_by AS (
     SELECT 1 AS level, CAST(CONCAT('-> ', u_name) AS VARCHAR(4000)) AS connect_by_path, usr.* 
       FROM users usr WHERE u_id =10
     UNION ALL
     SELECT level + 1 AS level, CONCAT(connect_by_path, ' / ', usr.u_name) AS connect_by_path, usr.* 
       FROM cte_connect_by r INNER JOIN users usr ON  r.u_id = usr.rep_mgr
  )
  SELECT u_id, u_name, level, connect_by_path path
  FROM cte_connect_by
  -- 仅保留存在直接下属的用户
  WHERE EXISTS (
    SELECT 1 FROM users u WHERE u.rep_mgr = cte_connect_by.u_id
  )
  ORDER BY level;

逻辑说明

EXISTS子句会检查当前查询到的用户ID,是否在users表的rep_mgr字段中出现过,只要有任意一条记录的rep_mgr等于当前用户u_id,就说明该用户有直接下属,符合返回条件,否则就会被过滤掉。


内容的提问来源于stack exchange,提问作者Sims Susee

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 10:45:03