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

Oracle SQL:筛选满足指定Value条件且排除特定值的Key

Oracle SQL 筛选符合条件的KEY

我来给你两种实用的解决方案,都能精准满足你的需求,在Oracle环境下运行稳定:

方法一:GROUP BY + HAVING 聚合判断

这种方法通过分组后聚合计算,直接在HAVING子句里定义筛选条件,逻辑清晰:

SELECT KEY
FROM MyTableName
GROUP BY KEY
HAVING SUM(CASE WHEN Value1 IN ('ABC', 'DEF') THEN 1 ELSE 0 END) > 0
   AND SUM(CASE WHEN Value1 = 'YUI' THEN 1 ELSE 0 END) = 0;
  • 第一个聚合条件:确保当前KEY下至少存在一条Value1为ABC或DEF的记录
  • 第二个聚合条件:确保当前KEY下完全没有Value1为YUI的记录

方法二:NOT EXISTS 子查询排除

这种方法更贴近直观逻辑,先筛选出有目标值的KEY,再排除掉包含YUI的KEY:

SELECT DISTINCT t1.KEY
FROM MyTableName t1
WHERE t1.Value1 IN ('ABC', 'DEF')
  AND NOT EXISTS (
    SELECT 1
    FROM MyTableName t2
    WHERE t2.KEY = t1.KEY
      AND t2.Value1 = 'YUI'
  );
  • NOT EXISTS子查询会检查当前KEY是否存在YUI记录,存在则排除
  • 用DISTINCT是因为同一个KEY可能对应多条ABC/DEF记录,避免重复返回

两种方法都能得到你预期的结果(仅返回KEY=1),可以根据你的表数据量选择:如果表数据量大,GROUP BY的方法通常性能更优;如果逻辑需要更灵活扩展,子查询的方式可读性更强。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:28:46