MySQL按条件查询特定行:筛选含Value=D且不含B的ID
MySQL Query: Find IDs with at Least One 'D' and No 'B' in Value Column
首先明确你的原始表数据(假设表名为your_table):
ID Value KA-1 A KA-1 B KA-1 C KA-1 D KA-2 A KA-2 C KA-2 C KA-2 D KA-3 C KA-3 B
你的需求是筛选出同时满足两个条件的ID:
- 该ID对应的
Value中至少包含一个'D' - 该ID对应的
Value中完全不存在'B'
预期输出结果:
ID KA-2
方案1:使用GROUP BY + HAVING聚合筛选
这种方法逻辑直观,通过分组后统计符合条件的记录数来筛选:
SELECT ID FROM your_table GROUP BY ID HAVING -- 确保至少有一个D SUM(CASE WHEN Value = 'D' THEN 1 ELSE 0 END) > 0 -- 确保完全没有B AND SUM(CASE WHEN Value = 'B' THEN 1 ELSE 0 END) = 0;
方案2:使用EXISTS + NOT EXISTS子查询
如果你的表数据量较大,这种方案在有合适索引(比如ID和Value的联合索引)的情况下性能会更优:
SELECT DISTINCT t1.ID FROM your_table t1 WHERE t1.Value = 'D' AND NOT EXISTS ( SELECT 1 FROM your_table t2 WHERE t2.ID = t1.ID AND t2.Value = 'B' );
这里的DISTINCT用来去除同一个ID下多条D记录带来的重复结果。
内容的提问来源于stack exchange,提问作者Vector JX
相关产品推荐
相关产品推荐

