Sql 检查ORACLE中具有多行的特定行

Sql 检查ORACLE中具有多行的特定行,sql,oracle,Sql,Oracle,我想在username(ur_username)表中选择状态为禁用的所有应用程序的用户列表,并且该用户应在Person表(ur_Person)中处于活动状态 我尝试了以下查询: select distinct E.PERSON_ID , E.DOMAIN_ID,e.first_name,e.last_name,e.type,E.username, E.SYSTEM_name from (SELECT distinct p.person_id,p.domain_id,p.first_na

我想在username(ur_username)表中选择状态为禁用的所有应用程序的用户列表,并且该用户应在Person表(ur_Person)中处于活动状态

我尝试了以下查询:

 select distinct E.PERSON_ID , E.DOMAIN_ID,e.first_name,e.last_name,e.type,E.username, E.SYSTEM_name  from  
(SELECT  distinct p.person_id,p.domain_id,p.first_name,p.last_name,p.type,u.username, U.STATUS, U.SYSTEM_ID,s.system_name from ur_username u join
ur_username_person up on u.username_id=up.username_id 
join ur_person p on up.person_id=p.person_id join ur_system s on u.system_id=s.system_id 
 WHERE p.status='ACTIVE') E WHERE E.person_id IN 
  ( select distinct P.PERSON_ID from ur_username u join  ur_username_person up on u.username_id=up.username_id 
    join ur_person p on up.person_id=p.person_id 
   where u.status='DISABLED')
我需要在用户名表中获得所有系统中处于禁用状态的人员列表,如下图所示:


但是,我得到的是一个系统中禁用但在其他一些系统中也处于活动状态的人员:

您可以使用聚合和
拥有
来获取
人员id

select p.person_id
from ur_username u join
     ur_username_person up
     on u.username_id = up.username_id join
     ur_person p join
     ur_system s
     on u.system_id = s.system_id 
where p.status = 'ACTIVE'
group by p.person_id
having max(u.status) = min(u.status) and max(u.status) ='DISABLED';

您指定需要人员,因此这似乎回答了您的问题。您可以轻松增强此查询以返回更多列。

您可以使用聚合和
拥有
来获取
人员id

select p.person_id
from ur_username u join
     ur_username_person up
     on u.username_id = up.username_id join
     ur_person p join
     ur_system s
     on u.system_id = s.system_id 
where p.status = 'ACTIVE'
group by p.person_id
having max(u.status) = min(u.status) and max(u.status) ='DISABLED';
您指定需要人员,因此这似乎可以回答您的问题。您可以轻松地增强此查询以返回更多列