Sql 检查ORACLE中具有多行的特定行
我想在username(ur_username)表中选择状态为禁用的所有应用程序的用户列表,并且该用户应在Person表(ur_Person)中处于活动状态 我尝试了以下查询: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
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';
您指定需要人员,因此这似乎可以回答您的问题。您可以轻松地增强此查询以返回更多列