MySQL复杂查询场景:如何筛选仅服务过客户2且无其他客户的员工
正确SQL实现方案
你原有查询已经完成了「仅服务过1位客户」的过滤,只需要追加唯一客户为2的判断即可,注意你原有SQL里存在字段拼写错误:emplyoee 拼写错误,正确应为 employee。
写法1:单GROUP BY查询(写法简洁)
SELECT employee, client FROM employee_client GROUP BY employee HAVING COUNT(*) = 1 AND MAX(client) = 2;
逻辑说明:因为已经通过COUNT(*) = 1确保每个员工分组下只有一条记录,所以MAX(client)(也可以替换为MIN(client))就是该员工唯一服务的客户,直接判断等于2即可。
写法2:子查询嵌套(兼容性更高、逻辑更直观)
SELECT * FROM employee_client WHERE client = 2 AND employee IN ( SELECT employee FROM employee_client GROUP BY employee HAVING COUNT(*) = 1 );
逻辑说明:
- 子查询先筛选出所有仅服务过1位客户的员工列表
- 外层查询再过滤出这些员工中服务的客户为2的记录
两种写法都可以得到你需要的employee=b、client=2的结果,自动排除两类不符合条件的记录:
- 员工c服务的客户数大于1,不会出现在过滤结果中
- 员工d虽然仅服务1位客户,但对应的客户不是2,会被过滤
内容的提问来源于stack exchange,提问作者Ijaz Ahmed
相关产品推荐
相关产品推荐

