Oracle查询:基于SCODE列获取STYPE列中同时匹配多值的去重公共值
解答:仅用Oracle SQL即可实现需求
完全不需要编写额外的Java代码,直接通过Oracle SQL查询就能精准找出你需要的结果。下面给你两种常用的实现思路:
方法一:分组统计过滤
这种方法通过分组STYPE,统计关联的不同SCODE数量,筛选出恰好关联9531和9569的记录:
SELECT DISTINCT STYPE FROM your_table_name WHERE SCODE IN ('9531', '9569') GROUP BY STYPE HAVING COUNT(DISTINCT SCODE) = 2;
思路解释:
- 先用
WHERE子句过滤出SCODE是9531或9569的记录,缩小查询范围 - 按
STYPE分组后,用COUNT(DISTINCT SCODE)统计每个STYPE关联的不同SCODE数量 - 只有数量等于2的STYPE,才说明同时关联了9531和9569这两个值
方法二:使用交集(INTERSECT)
通过两次查询分别找出关联9531和9569的STYPE,再取交集:
SELECT STYPE FROM your_table_name WHERE SCODE = '9531' INTERSECT SELECT STYPE FROM your_table_name WHERE SCODE = '9569';
思路解释:
- 第一个查询获取所有关联SCODE=9531的STYPE
- 第二个查询获取所有关联SCODE=9569的STYPE
INTERSECT操作会自动返回两个结果集的公共部分,并且天然去重,不需要额外加DISTINCT
两种方法都能高效满足你的需求,你可以根据自己的习惯和表数据量选择合适的方式。
内容的提问来源于stack exchange,提问作者Naveen Kumar
相关产品推荐
相关产品推荐

