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

MySQL:如何查询排除含ADD值的ID_2分组对应的所有行?

解决MySQL分组筛选问题:找出不含特定值的分组所有行

先明确你的数据场景和需求:
原始数据表的结构与数据如下:

ID ID_2 Var1
1 L-1 ADD
2 L-1 DER
3 L-2 ADD
4 L-2 DER
5 L-3 DER
5 L-4 DER

你的核心需求是:仅获取那些ID_2分组下完全不存在Var1值为ADD的所有行,最终要得到L-3和L-4这两个分组的全部记录。

下面给你两种实用的实现方案:

方法一:子查询排除法

思路非常直接:先找出所有包含Var1='ADD'的ID_2分组,再在主查询里排除这些分组的记录。

SELECT t.*
FROM your_table t
WHERE t.ID_2 NOT IN (
    SELECT DISTINCT ID_2
    FROM your_table
    WHERE Var1 = 'ADD'
);

逻辑拆解:

  • 子查询SELECT DISTINCT ID_2 FROM your_table WHERE Var1 = 'ADD'会得到所有存在ADD的分组(也就是L-1和L-2)
  • 主查询通过NOT IN排除这些分组,剩下的就是完全没有ADD的分组的所有行

方法二:分组聚合关联法

通过分组统计每个ID_2下ADD的出现次数,筛选出次数为0的分组,再关联原表获取对应行:

SELECT t.*
FROM your_table t
JOIN (
    SELECT ID_2
    FROM your_table
    GROUP BY ID_2
    HAVING SUM(CASE WHEN Var1 = 'ADD' THEN 1 ELSE 0 END) = 0
) AS valid_groups ON t.ID_2 = valid_groups.ID_2;

逻辑拆解:

  • 子查询里,SUM(CASE WHEN Var1 = 'ADD' THEN 1 ELSE 0 END)会统计每个ID_2分组中ADD的出现次数
  • HAVING子句筛选出次数为0的分组(即完全没有ADD的分组)
  • 最后通过JOIN关联原表,拿到这些分组的所有记录

执行任意一种方法后,都会得到你期望的结果:

ID ID_2 Var1
5 L-3 DER
5 L-4 DER

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:15:08