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

如何在查询Wage员工数据时同时包含其Manager数据

需求与解决方案

我有一张名为Employees的表,结构及数据如下:

IDFull NameEmployee TypeEmployment RateManager ID
143Sam SmithFull TimeWage146
144Jay ReddyPart TimeWage146
145Nick YoungFull TimeWage146
146Trevor SimmFull TimeSalary147
147Justin PetersPart TimeSalary147
148Lisa HowardFull TimeSalary140
149Nicky WestFull TimeSalary140
150Gemma YuFull TimeWage146
151Sally ZhangPart TimeSalary140
152James HillaryFull TimeWage146
153Nikita ShawFull TimeWage146

需要编写一条SQL查询,返回所有Employment Rate为Wage的员工,同时包含这些员工对应的管理者数据,预期返回结果如下:

IDFull NameEmployee TypeEmployment RateManager ID
143Sam SmithFull TimeWage146
144Jay ReddyPart TimeWage146
145Nick YoungFull TimeWage146
146Trevor SimmFull TimeSalary147
147Justin PetersPart TimeSalary147
150Gemma YuFull TimeWage146
152James HillaryFull TimeWage146
153Nikita ShawFull TimeWage146

目前已写出查询Wage员工的基础SQL语句,需要修改以同时包含对应管理者数据:

Select * From Employees
Where [Employment Rate] = 'Wage'

解决方案

方法一:使用UNION ALL合并结果(贴合预期需求)

先查询所有Wage员工,再关联查询他们的直接管理者并去重,避免重复的管理者记录:

-- 先获取所有Employment Rate为Wage的员工
SELECT * FROM Employees
WHERE [Employment Rate] = 'Wage'
UNION ALL
-- 获取这些员工对应的直接管理者,去重避免重复返回同一个管理者
SELECT DISTINCT m.* FROM Employees e
JOIN Employees m ON e.[Manager ID] = m.ID
WHERE e.[Employment Rate] = 'Wage'

方法二:递归CTE处理多层级管理者(如需包含所有上级)

如果存在多级管理(比如管理者还有自己的上级),可以用递归CTE一次性获取所有关联层级的管理者:

WITH EmployeeHierarchy AS (
    -- 基础数据:所有Wage员工
    SELECT * FROM Employees
    WHERE [Employment Rate] = 'Wage'
    UNION ALL
    -- 递归获取当前成员的上级管理者,排除自引用循环
    SELECT m.* FROM EmployeeHierarchy e
    JOIN Employees m ON e.[Manager ID] = m.ID
    WHERE m.ID <> e.ID
)
SELECT DISTINCT * FROM EmployeeHierarchy
ORDER BY ID;

说明:从预期结果来看,方法一更匹配需求,它仅返回Wage员工和他们的直接管理者,且通过DISTINCT确保同一个管理者只出现一次。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 20:40:18