首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Oracle中查找表中的特定值?

如何在Oracle中查找表中的特定值?
EN

Stack Overflow用户
提问于 2018-10-05 14:03:14
回答 5查看 117关注 0票数 0

假设我的表是TEST_123,它包含以下记录:

代码语言:javascript
复制
id |  cid | result
------------------
1  |  C-1 |   TAM
2  |  C-1 |   TAM
3  |  C-2 |   RAM
4  |  C-2 |   TAM
5  |  C-3 |   SAM
6  |  C-3 |   SAM

现在我想要这样的cid,它只有一种类型的结果,所以答案应该是C-1和C-3,而不是C-2,因为它有两种不同的结果。是否需要Oracle query来执行此操作?

EN

回答 5

Stack Overflow用户

发布于 2018-10-05 15:17:03

您只需理解GROUP BYHAVING子句。

答案很简单,就像

代码语言:javascript
复制
select cid
from TEST_123
group by cid
having count(distinct result) = 1

注意:group byCID中选择不同的键; filters on条件对组中的所有记录都有效,在本例中为count(distinct result) = 1

票数 3
EN

Stack Overflow用户

发布于 2018-10-05 14:16:22

使用是存在的,这有点棘手,因为每个组的结果应该是相同的

代码语言:javascript
复制
 select t1.* from TEST_123 t1 where exists(
             select 1 from TEST_123 t2 where t2.cid=t1.cid
                                      and t2.result=t1.result
                                      group by t2.cid,t2.result
                                      having count(*)=
                                       (select count(*) from TEST_123 t3
                                       where t3.cid=t2.cid)
                                      )

示例

代码语言:javascript
复制
with TEST_123 as
(
select 1 as id , 'c-1' as cid , 'tam' as result from dual
union all
select 2 as id , 'c-1' as cid , 'tam' as result from dual
union all
select 3 as id , 'c-2' as cid , 'tam' as result from dual
union all
select 4 as id , 'c-2' as cid , 'ram' as result from dual

)

select distinct t1.cid from TEST_123 t1 where exists(
                 select 1 from TEST_123 t2 where t2.cid=t1.cid
                                          and t2.result=t1.result
                                          group by t2.cid,t2.result
                                          having count(*)=
                                           (select count(*) from TEST_123 t3
                                           where t3.cid=t2.cid)
                                          )

demo

票数 1
EN

Stack Overflow用户

发布于 2018-10-05 15:12:03

基于@zaynul的回答,这里是另一个变体:

代码语言:javascript
复制
with TEST_123 as
(
select 1 as id , 'c-1' as cid , 'tam' as result from dual
union all
select 2 as id , 'c-1' as cid , 'tam' as result from dual
union all
select 3 as id , 'c-2' as cid , 'tam' as result from dual
union all
select 4 as id , 'c-2' as cid , 'ram' as result from dual
)
select * from test_123 where cid in (
    select cid from test_123 group by cid having count(distinct result) = 1);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52659211

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档