Sql Oracle查询以查找表中列的唯一匹配项

Sql Oracle查询以查找表中列的唯一匹配项,sql,oracle,Sql,Oracle,这是我的桌子: ID|2ndID|Value 1|ABC|103 2|ABC|102 3|DEF|103 4|XYZ|105 我的查询应该返回ID的所有实例,该实例对于第二个DID只有一个值=103。它不应该返回ID 1和2,因为除了103之外,ABC也有102。另一方面,3 | DEF只有一个值=103。我需要这样的争吵。我也不需要4 | XYZ,因为值为103。基于上述样本集,我的结果应仅为 3|DEF|103 我可以使用一个包含COUNT(*)=1的组,它将返回all,但我不知道如何将

这是我的桌子:

ID|2ndID|Value
1|ABC|103
2|ABC|102
3|DEF|103
4|XYZ|105
我的查询应该返回ID的所有实例,该实例对于第二个DID只有一个值=103。它不应该返回ID 1和2,因为除了103之外,ABC也有102。另一方面,3 | DEF只有一个值=103。我需要这样的争吵。我也不需要4 | XYZ,因为值为103。基于上述样本集,我的结果应仅为

3|DEF|103
我可以使用一个包含COUNT(*)=1的组,它将返回all,但我不知道如何将其过滤为Value=103


提前谢谢

这将返回具有单个值的所有行

select * from 
my_table where 2ndId in (

select 2ndId 
from my_table  
group by 2ndId
having count(*)  =1 
)
如果需要对值103强制执行过滤器

select * from 
my_table where 2ndId in (

select 2ndId 
from my_table  
group by 2ndId
having count(*)  =1 
)
and value = 103

这是聚合查询中
HAVING
子句的标准应用程序。您希望按第二个id分组,并仅选择只有一行且最小值(值)为103的组
MIN(value)
将是唯一行中的唯一值,在只有一行开始的组中;你不在乎其他任何团体

注释:此解决方案假定组合
(第二个id,值)
是唯一的-对于不同的id,它不能在表中出现多次。我在原始问题下的评论中询问OP,以澄清事实是否如此

with
  mytable ( id, second_id, value ) as (
    select 1, 'ABC', 103 from dual union all
    select 2, 'ABC', 102 from dual union all
    select 3, 'DEF', 103 from dual union all
    select 4, 'XYZ', 105 from dual
  )
-- End of SIMULATED inputs (for testing only, NOT PART OF THE SOLUTION).
-- SQL query begins BELOW THIS LINE. Use your actual table and column names.
select   min(id) as id, second_id, min(value) as value
from     mytable
group by second_id
having   count(*) = 1 and min(value) = 103
;

ID  SECOND_ID  VALUE
--  ---------  -----
 3  DEF          103

您还可以有第五行,ID=5,2ndID=DEF,value=103吗?在这种情况下,期望的结果是什么?是否也要选择该行?不,这是不可能的。谢谢你的邀请。