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

基于给定表结构,如何查询同时在IT和SE部门的员工姓名?

查询同时在IT和SE部门的员工姓名的SQL解法

嘿,这个需求挺常见的,给你分享几种实用的SQL写法,你可以根据自己的数据库情况选最顺手的:

方法一:GROUP BY + HAVING(最通用的写法)

这种方法适配大多数场景,逻辑清晰还能避免重复数据的干扰:

SELECT e.sname
FROM Emp e
JOIN Dep d ON e.sid = d.sid
WHERE d.dep IN ('IT', 'SE')
GROUP BY e.sid, e.sname
HAVING COUNT(DISTINCT d.dep) = 2;

这里用COUNT(DISTINCT d.dep)是为了防止同一个员工在同一个部门有多条重复记录的情况,要是你能确定Dep表不会出现这种重复,换成COUNT(*)也没问题,性能会稍好一点。

方法二:多表JOIN(逻辑直观)

如果需要筛选的部门数量不多,这种写法读起来特别明白,一眼就能看出是找同时存在两个部门关联的员工:

SELECT e.sname
FROM Emp e
JOIN Dep d1 ON e.sid = d1.sid AND d1.dep = 'IT'
JOIN Dep d2 ON e.sid = d2.sid AND d2.dep = 'SE';

不过要是以后要加更多部门筛选条件,就得继续追加JOIN语句,会有点繁琐。

方法三:EXISTS子查询(性能友好)

如果你的Dep表在sid和dep字段上建了索引,这种写法的查询性能会很不错,而且逻辑也非常清晰:

SELECT e.sname
FROM Emp e
WHERE EXISTS (
    SELECT 1 FROM Dep d WHERE d.sid = e.sid AND d.dep = 'IT'
)
AND EXISTS (
    SELECT 1 FROM Dep d WHERE d.sid = e.sid AND d.dep = 'SE'
);

它的核心思路就是逐个校验员工是否同时存在IT和SE部门的关联记录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 18:57:29