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

如何在MySQL查询中排除特定行?附表结构与需求

嘿,这个需求其实是要把那些「所在Unique_1分组里有Value=ALL记录」的行全部排除掉对吧?我给你两种常用的SQL实现方式,都能精准达到你要的效果:


你的表结构

Table1

ID    Part1  key     Unique_1
ARF-11 Aekjh aer-ert IYT-15
ARF-12 Aferf aee-sta IYT-15
ARF-13 Berfe aer-ert IYT-15
ARF-14 Aeret aty-ert IYT-16
ARF-15 xrete ant-ert IYT-16
ARF-16 srete ant-ert IYT-17

Table2

Key     Value
aer-ert Some
aee-sta ALL
aty-ert Few
ant-ert Less

需求核心

咱们要保留的是:整个Unique_1分组里完全没有Value=ALL记录的所有行。简单说就是,只要某个Unique_1分组里出现过一次Value=ALL,那这个分组的所有行都要被移除(比如示例里的IYT-15分组就因为包含aee-sta对应的ALL,所以全组被排除)。

解决方案

方法一:用NOT EXISTS关联子查询(逻辑最直观)

这种写法直接检查当前行所属的Unique_1分组里有没有Value=ALL的记录,没有就保留:

SELECT t1.ID, t1.Part1, t1.key, t1.Unique_1, t2.Value
FROM Table1 t1
INNER JOIN Table2 t2 ON t1.key = t2.Key
WHERE NOT EXISTS (
    -- 子查询:检查当前Unique_1分组是否存在Value=ALL的记录
    SELECT 1
    FROM Table1 t1_inner
    INNER JOIN Table2 t2_inner ON t1_inner.key = t2_inner.Key
    WHERE t1_inner.Unique_1 = t1.Unique_1
      AND t2_inner.Value = 'ALL'
);

方法二:用CTE先筛选合法的Unique_1分组

先把所有不含Value=ALL的Unique_1分组找出来,再关联原表获取完整数据:

WITH ValidUniqueGroups AS (
    SELECT t1.Unique_1
    FROM Table1 t1
    INNER JOIN Table2 t2 ON t1.key = t2.Key
    GROUP BY t1.Unique_1
    -- 统计分组里Value=ALL的数量,等于0说明该分组完全没有ALL记录
    HAVING COUNT(CASE WHEN t2.Value = 'ALL' THEN 1 END) = 0
)
SELECT t1.ID, t1.Part1, t1.key, t1.Unique_1, t2.Value
FROM Table1 t1
INNER JOIN Table2 t2 ON t1.key = t2.Key
INNER JOIN ValidUniqueGroups vu ON t1.Unique_1 = vu.Unique_1;

最终执行结果

两种方法都会输出你期望的结果:

ID    Part1  key     Unique_1 Value
ARF-14 Aeret aty-ert IYT-16   Few
ARF-15 xrete ant-ert IYT-16   Less
ARF-16 srete ant-ert IYT-17   Less

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:30:49