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

SQL查询:获取覆盖pm(1,2,3)全部取值的对应pt字段值

SQL实现:查找关联了全部指定第二列取值的第一列值

这个需求属于典型的关系除法场景,目标是找出所有满足「关联的pm字段覆盖1、2、3全部三个取值」的pt值,针对给出的样例数据,以下写法都可以正确返回结果1:

通用写法(适配绝大多数数据库)

直接按pt分组,筛选出pm在目标集合内、且去重后pm数量等于目标值总个数的分组即可,可读性最好:

SELECT pt
FROM 你的表名
WHERE pm IN (1, 2, 3)
GROUP BY pt
HAVING COUNT(DISTINCT pm) = 3;

如果表中已经做了(pt, pm)的联合唯一约束,不存在同一个pt对应重复pm值的情况,可以去掉DISTINCT,查询性能会更高:

SELECT pt
FROM 你的表名
WHERE pm IN (1, 2, 3)
GROUP BY pt
HAVING COUNT(pm) = 3;

扩展写法(适配目标值存在维度表的场景)

如果需要匹配的pm值存储在独立的维度表中,后续可能调整目标取值范围,可以改成关联+动态计数的写法,不需要手动修改HAVING后的匹配数量:

SELECT t.pt
FROM 你的表名 t
JOIN pm维度表 p ON t.pm = p.pm
WHERE p.pm IN (1, 2, 3)
GROUP BY t.pt
HAVING COUNT(DISTINCT t.pm) = (
    SELECT COUNT(*) FROM pm维度表 WHERE pm IN (1,2,3)
);

结果验证

代入提供的测试数据:

ptpm
11
12
13
21
22
  • pt=1分组下匹配到的pm去重后共3个,满足条件
  • pt=2分组下匹配到的pm去重后共2个,不满足条件
    最终返回结果和预期一致,为1。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 18:09:16