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

如何按项目筛选员工ID并排除同项目的直属经理?

解决方案

要实现按项目分组筛选员工,排除同项目内担任其他员工直属经理的人员,可以通过以下两种常用SQL写法实现:

方法1:使用NOT EXISTS子查询

这种方式逻辑直观,直接检查当前员工是否在同项目内有下属:

SELECT pe.project_num, pe.emp_id
FROM project_employees pe
WHERE NOT EXISTS (
    -- 检查是否存在同项目内的员工,其直属经理为当前员工
    SELECT 1
    FROM employees e
    JOIN project_employees pe2 
      ON e.emp_id = pe2.emp_id
    WHERE e.mgr_id = pe.emp_id
      AND pe2.project_num = pe.project_num
)
ORDER BY pe.project_num, pe.emp_id;

逻辑说明

  • 主查询遍历所有项目员工记录
  • 子查询关联员工表和项目员工表,确认是否存在同项目内的员工,将当前员工设为直属经理
  • 若不存在这样的下属员工,则保留当前员工记录

方法2:使用LEFT JOIN + IS NULL

通过预筛选出所有"在同项目内有下属的经理",再排除这些人员:

SELECT pe.project_num, pe.emp_id
FROM project_employees pe
LEFT JOIN (
    -- 先找出每个项目中,担任同项目员工直属经理的人员
    SELECT pe2.project_num, e.mgr_id
    FROM employees e
    JOIN project_employees pe2 
      ON e.emp_id = pe2.emp_id
) project_mgrs 
  ON pe.project_num = project_mgrs.project_num 
  AND pe.emp_id = project_mgrs.mgr_id
-- 保留不在"同项目经理列表"中的员工
WHERE project_mgrs.mgr_id IS NULL
ORDER BY pe.project_num, pe.emp_id;

逻辑说明

  • 子查询先提取所有"有下属在同项目的经理ID"及其所属项目
  • 将项目员工表与该子查询结果左连接,未匹配到的记录即为非经理(或同项目无下属的经理),符合需求

验证结果

针对你的样本数据,两种写法都会返回:

project_num | emp_id
------------|-------
1           | e1
1           | e2
4           | e5
4           | e7

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 11:48:28