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

Oracle SQL如何筛选未关联Name='A'的ID?

Oracle SQL筛选不含指定Name的ID解决方案

你原语句select distinct ID from table where Name <> 'A'无法得到正确结果的原因是:ID=1下存在Name='B'、Name='C'这类满足Name <> 'A'的行,distinct去重后依然会保留ID=1,不符合“筛选Name列中不存在'A'的ID”的需求。

以下是几种可行的实现方式:

方法1:使用NOT EXISTS子查询

SELECT DISTINCT ID
FROM your_table t1
WHERE NOT EXISTS (
    SELECT 1
    FROM your_table t2
    WHERE t2.ID = t1.ID
      AND t2.Name = 'A'
);

逻辑:直接筛选**不存在同ID且Name为'A'**的记录,彻底排除所有包含'A'的ID,结果就是2、3。

方法2:使用GROUP BY + HAVING条件

SELECT ID
FROM your_table
GROUP BY ID
HAVING COUNT(CASE WHEN Name = 'A' THEN 1 END) = 0;

逻辑:按ID分组后,统计每个ID下Name='A'的行数,当统计结果为0时,说明该ID下没有'A',符合需求。

方法3:使用NOT IN子查询

SELECT DISTINCT ID
FROM your_table
WHERE ID NOT IN (
    SELECT ID
    FROM your_table
    WHERE Name = 'A'
);

逻辑:先找出所有包含'A'的ID(此处为1),再筛选不在这个集合里的ID,最终得到2、3。

关于LISTAGG的用法(可选验证用)

如果想用LISTAGG拼接每个ID的Name集合来辅助筛选,可以这样写,但这种方法存在误判风险(比如Name包含'A'子串时),优先级低于前三种方法:

SELECT ID
FROM (
    SELECT ID, LISTAGG(Name, ',') WITHIN GROUP (ORDER BY Name) AS name_list
    FROM your_table
    GROUP BY ID
)
WHERE name_list NOT LIKE '%A%';

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 18:22:07