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

如何编写SQL查询筛选出同时包含指定多值的ID

问题描述

现有数据表(假设表名为your_table):

idvalue
1A
1B
1C
2A
2B
3A

需要筛选出同时包含A、B、C三个值的ID,预期结果:

id
1

方法1:分组统计法

这是最常用的方案,通过分组统计每个ID对应的不同值数量来筛选:

SELECT id
FROM your_table
WHERE value IN ('A', 'B', 'C')
GROUP BY id
HAVING COUNT(DISTINCT value) = 3;

说明

  • WHERE子句先过滤掉无关的value,减少后续计算量
  • GROUP BY id按ID分组后,COUNT(DISTINCT value)统计该ID下的不同值数量,等于3则说明同时包含A、B、C
  • 如果表中同一个ID不会重复出现同一个value,也可以简化为COUNT(*) = 3

方法2:交集查询法

利用集合交集的逻辑,分别找出含A、含B、含C的ID,再取三者的交集:

SELECT id
FROM your_table
WHERE value = 'A'
INTERSECT
SELECT id
FROM your_table
WHERE value = 'B'
INTERSECT
SELECT id
FROM your_table
WHERE value = 'C';

说明

  • INTERSECT关键字会保留同时出现在三个子查询中的ID,逻辑直观易懂
  • 注意部分数据库(比如MySQL)不支持INTERSECT,这种情况可以用IN子句替代:
SELECT id
FROM your_table
WHERE value = 'A'
AND id IN (SELECT id FROM your_table WHERE value = 'B')
AND id IN (SELECT id FROM your_table WHERE value = 'C');

方法3:自连接查询法

通过多次自连接,把同一个ID下的A、B、C记录关联起来:

SELECT DISTINCT t1.id
FROM your_table t1
JOIN your_table t2 ON t1.id = t2.id AND t2.value = 'B'
JOIN your_table t3 ON t1.id = t3.id AND t3.value = 'C'
WHERE t1.value = 'A';

说明

  • 三次关联确保同一个ID下同时存在A、B、C三条记录
  • DISTINCT用于避免结果出现重复ID(如果表中id+value是唯一组合,可省略)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 15:55:52