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

MySQL中IN运算符使用问题排查:查询管理≥5名员工的经理名称出错

问题分析:查询管理至少5名员工的经理姓名

数据表结构

Employee:
+-----+-------+------------+-----------+
| id  | name  | department | managerId |
+-----+-------+------------+-----------+
| 101 | John  | A          | null      |
| 102 | Dan   | A          | 101       |
| 103 | James | A          | 101       |
| 104 | Amy   | A          | 101       |
| 105 | Anne  | A          | 101       |
| 106 | Ron   | B          | 101       |
+-----+-------+------------+-----------+

需求

查询管理至少5名员工的经理姓名。

原SQL语句

select name from employee where managerid in (
select managerid from employee where managerid is not null group by managerid having count(*) > 4
);

结果对比

  • 预期输出:
+------+
| name |
+------+
| John |
+------+
  • 实际输出:
| name  |
| ----- |
| Dan   |
| James |
| Amy   |
| Anne  |
| Ron   |

问题原因

你的SQL逻辑完全搞反了:外层查询的managerid in (...)条件,筛选出的是经理ID在子查询结果里的员工——也就是所有被John管理的下属,而非John本人。

John的managerid字段值为null,根本不会被managerid in (101)这个条件匹配到,所以自然查不到他。

修正后的SQL

正确逻辑是找到id等于子查询返回的经理ID的员工(即经理本人),只需把外层查询的managerid换成id:

select name from employee where id in (
select managerid from employee where managerid is not null group by managerid having count(*) > 4
);

或者用自连接写法,逻辑更直观:

select e.name
from employee e
join (
    select managerid
    from employee
    where managerid is not null
    group by managerid
    having count(*) >= 5
) m on e.id = m.managerid;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 09:15:58