Oracle SQL запрос с несколькими столбцами, используя один и тот же подзапрос с ИЛИ - PullRequest
1 голос
/ 26 апреля 2020

Нужна помощь в упрощении приведенного ниже запроса Oracle SQL с условием ИЛИ: возможно ли использовать один запрос на выбор вместо нескольких.

для этого подзапроса "выберите usr_key из usr, где usr_login = 'abcd'" я смог превратить его в сингл вместо записи 4 раза, поскольку он просто дает одно значение. но для второго подзапроса он записывает несколько значений, поэтому я не могу их объединить.

select * from catalog  where 
(
(select usr_key from usr where usr_login='abcd') in (approver_user,CERTIFIER_USER,FULFILLMENT_USER) 
or ('abcd') in (EMERGENCYAPPROVERUSER,SPECIALAPPROVERUSER)
or approver_role IN 
(select ugp.ugp_key from ugp , usg,usr uuu where ugp.ugp_key=usg.ugp_key and usg.usr_key=uuu.usr_key  and uuu.usr_login='abcd')
or CERTIFIER_ROLE IN 
(select ugp.ugp_key from ugp , usg,usr uuu where ugp.ugp_key=usg.ugp_key and usg.usr_key=uuu.usr_key  and uuu.usr_login='abcd')
or FULFILLMENT_ROLE IN 
(select ugp.ugp_key from ugp , usg,usr uuu where ugp.ugp_key=usg.ugp_key and usg.usr_key=uuu.usr_key  and uuu.usr_login='abcd')
)
and entity_type='Entitlement';


1 Ответ

1 голос
/ 26 апреля 2020

Использовать предложение WITH

WITH some_query AS(
    select ugp.ugp_key from ugp , usg,usr uuu 
    where ugp.ugp_key=usg.ugp_key and usg.usr_key=uuu.usr_key  and uuu.usr_login='abcd'
)
select * from catalog  
where 
(
    (select usr_key from usr where usr_login='abcd') in (approver_user,CERTIFIER_USER,FULFILLMENT_USER) 
    or 
    ('abcd') in (EMERGENCYAPPROVERUSER,SPECIALAPPROVERUSER)
    or 
    approver_role IN    (SELECT * FROM some_query)
    or 
    CERTIFIER_ROLE IN   (SELECT * FROM some_query)
    or 
    FULFILLMENT_ROLE IN (SELECT * FROM some_query)
)
and entity_type='Entitlement';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...