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

如何查询employee表中仅持有P1、P2两款产品的员工ID

SQL实现方案

需求说明

现有employee表存储员工ID与关联产品ID的对应关系,需要筛选仅持有P1、P2两款产品,且没有其他关联产品的员工ID。

实现方法

方法1:分组聚合校验(兼容性最高,支持所有主流数据库)

核心逻辑:按员工ID分组后校验两个条件:

  • 该员工关联的不同产品总数恰好为2
  • 该员工没有关联P1、P2之外的其他产品

SQL语句如下:

SELECT Emp_id
FROM employee
GROUP BY Emp_id
HAVING COUNT(DISTINCT Prd_id) = 2
   AND SUM(CASE WHEN Prd_id NOT IN ('P1', 'P2') THEN 1 ELSE 0 END) = 0;

如果表中同一个员工不会重复关联同一款产品,可去掉COUNT函数中的DISTINCT关键字提升查询效率

如果你使用MySQL数据库,也可以用简化写法:

SELECT Emp_id
FROM employee
GROUP BY Emp_id
HAVING COUNT(DISTINCT Prd_id) = 2
   AND MAX(Prd_id IN ('P1', 'P2')) = 1;

方法2:正向匹配+反向排除(逻辑更直观)

通过子查询排除持有其他产品的员工,再校验是否同时持有P1、P2两款产品:

SELECT DISTINCT Emp_id
FROM employee e1
WHERE Prd_id IN ('P1', 'P2')
  AND NOT EXISTS (
    SELECT 1 
    FROM employee e2 
    WHERE e2.Emp_id = e1.Emp_id 
      AND e2.Prd_id NOT IN ('P1', 'P2')
)
GROUP BY Emp_id
HAVING COUNT(DISTINCT Prd_id) = 2;

输出结果

以上语句执行后将返回符合要求的员工ID:

Emp_id
E1
E4

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 01:18:03