SQL 检查组是否包含给定列的某些值 (ORACLE)

mis*_*mas 2 sql oracle group-by

我有包含这些记录的表 audit_log:

log_id | request_id | status_id
 1     |  2         |  5
 2     |  2         |  10
 3     |  2         |  20
 4     |  3         |  10
 5     |  3         |  20
Run Code Online (Sandbox Code Playgroud)

我想知道是否存在同时具有 status_id 5 和 10 的 request_ids。所以这个查询应该返回 request_id = 2 因为它的列 status_id 有值 5 和 10(request_id 3 被省略,因为 status_id 列只有 10 没有 5 的值)。
我怎么能用 SQL 做到这一点?
我想我应该按 request_id 使用 group,但我不知道如何检查 group 是否具有值为 5 和 10 的 status_id?

谢谢,
米斯马

Ale*_*sej 5

这可能是一种方式:

/* input data */ 
with yourTable(log_id , request_id , status_id) as (
 select 1   , 2     ,  5 from dual union all
 select 2   , 2     , 10 from dual union all
 select 3   , 2     , 20 from dual union all
 select 4   , 3     , 10 from dual union all
 select 5   , 3     , 20 from dual
 )
/* query */
select request_id
from yourTable
group by request_id
having count( distinct case when status_id in (5,10) then status_id end) = 2 
Run Code Online (Sandbox Code Playgroud)

这个怎么运作:

select request_id, 
       case when status_id in (5,10) then status_id end as checkColumn
from yourTable
Run Code Online (Sandbox Code Playgroud)

REQUEST_ID CHECKCOLUMN
---------- -----------
         2           5
         2          10
         2
         3          10
         3
Run Code Online (Sandbox Code Playgroud)

所以条件count (distinct ...) = 2起作用