SQL查询问题:不使用JOIN通过ReportsTo获取上级及下属数量
问题分析与解决
你的SQL代码返回Null是因为两个关键错误:
- 子查询里错误使用了
FirstName + ' ' + LastName,但你的员工表实际字段是FullName,字段名称不匹配。 - 子查询的关联条件
EmployeeID = ReportsTo没区分内外表字段,导致子查询内部的ReportsTo是自身表的字段,无法关联外部分组后的上级ID。
修正后的SQL代码
SELECT (SELECT FullName FROM Employees AS boss WHERE boss.EmployeeID = e.ReportsTo) AS FullName, COUNT(EmployeeID) AS Subordinates FROM Employees AS e WHERE ReportsTo IS NOT NULL GROUP BY ReportsTo
代码说明
- 给外部表起别名
e,子查询表起别名boss,通过boss.EmployeeID = e.ReportsTo明确关联上级员工ID和当前员工的ReportsTo字段。 - 子查询直接使用表中已有的
FullName字段,避免无意义的拼接错误。 - 分组后只保留预期结果需要的字段,结构与你要的输出一致。
执行后会得到预期结果:
| FullName | Subordinates |
|---|---|
| Andrew Fuller | 5 |
| Steven Buchanan | 3 |
内容的提问来源于stack exchange,提问作者StickyRunnerTR
相关产品推荐
相关产品推荐

