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
相关产品推荐
相关产品推荐

