在ORACLE

时间:2017-11-16 13:00:18

标签: sql oracle

我想为用户名(ur_username表中的所有应用程序选择已禁用状态的用户列表,并且用户应在Person Table(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')

我需要在用户名表中的所有系统中获取状态为“已禁用”的人员列表,如下图所示:

但我得到的人在一个系统中被禁用但在其他一些系统中也是活跃的:

1 个答案:

答案 0 :(得分:2)

您可以使用聚合和person_id

获取having
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';

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