我想为用户名(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')
我需要在用户名表中的所有系统中获取状态为“已禁用”的人员列表,如下图所示:
但我得到的人在一个系统中被禁用但在其他一些系统中也是活跃的:
答案 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';
您指定您想要这些人,所以这似乎回答了您的问题。您可以轻松地增强此查询以返回更多列。