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

如何在SQL表的同一列使用IN应用多条件,筛选同时具备指定技能的员工

图片展示了输入表结构和预期结果集

需求说明

需要查询Skill字段同时包含DBA和Data Analytics的员工的Emp_ID、姓名及对应技能记录,预期返回结果为Emp_ID 1000的2条记录、Emp_ID 1005的2条记录。

常见错误原因

直接使用Skill = 'DBA' OR Skill = 'Data Analytics'或者Skill IN ('DBA', 'Data Analytics')作为筛选条件,只会匹配到拥有任意一项技能的员工,无法保证同一个Emp_ID同时拥有两项技能,因此会把仅拥有DBA的1002、仅拥有Data Analytics的1003也纳入结果,不符合要求。

解决方案

方法1:分组聚合筛选法(兼容性最好,适用于所有SQL数据库)

先按员工ID和姓名分组,筛选出同时覆盖两项技能的员工,再关联原表返回对应的全部技能记录:

SELECT t.Emp_ID, t.Emp_Name, t.Skill
FROM your_table t
INNER JOIN (
    SELECT Emp_ID, Emp_Name
    FROM your_table
    WHERE Skill IN ('DBA', 'Data Analytics')
    GROUP BY Emp_ID, Emp_Name
    HAVING COUNT(DISTINCT Skill) = 2
) qualified_emp ON t.Emp_ID = qualified_emp.Emp_ID
WHERE t.Skill IN ('DBA', 'Data Analytics')
ORDER BY t.Emp_ID;

注:把your_table替换为实际的表名即可。如果表中同一个员工同一项技能不会出现重复记录,可以把COUNT(DISTINCT Skill)改成COUNT(*)性能更好。

方法2:双重EXISTS判断

通过两次存在性校验,保证当前员工同时拥有两项技能:

SELECT Emp_ID, Emp_Name, Skill
FROM your_table t1
WHERE Skill IN ('DBA', 'Data Analytics')
AND EXISTS (
    SELECT 1 FROM your_table t2 
    WHERE t2.Emp_ID = t1.Emp_ID AND t2.Skill = 'DBA'
)
AND EXISTS (
    SELECT 1 FROM your_table t3 
    WHERE t3.Emp_ID = t1.Emp_ID AND t3.Skill = 'Data Analytics'
)
ORDER BY Emp_ID;

以上两种方法都可以精准返回符合要求的4条记录,不会混入仅拥有单一技能的员工数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 18:00:05