У меня есть запрос с условным предложением WHERE, в котором я выбираю пользователей из Таблицы 1 на основе элемента страницы.
Если элемент страницы имеет значение TYPE1 или TYPE2, я выбираю пользователей из Table1, которых нет в Table2, удовлетворяя первому условию,
и если пользователь имеет тип TYPE3, то я выбираю пользователей из таблицы 2, которых нет в таблице 2, при втором условии.
Теперь мне нужно добавить еще два типа TYPE4 и TYPE5, но проблема в том, что если пользователи относятся к одному из этих типов, они
не должно уже существовать в таблице 2 с status='NEW'
SELECT 1
FROM Table2 b
WHERE b.id = a.id
AND b.type_id = :P2_TEST_TYPE
AND b.status = 'NEW'`
но должны быть в ролях «ПЕРВИЧНЫЕ» и «ВТОРИЧНЫЕ» соответственно:
mypackage.get_role(a.id) = 'PRIMARY' AND mypackage.get_type_id(TO_NUMBER(:P2_TEST_TYPE))='TYPE4'
И
mypackage.get_role(a.id) = 'SECONDARY' AND mypackage.get_type_id(TO_NUMBER(:P2_TEST_TYPE))='TYPE5'
Запрос, относящийся к типам TYPE1, TYPE2 и TYPE3, приведен ниже. Как я могу включить условия для TYPE4 и TYPE5 в этот запрос:
SELECT a.ID, a.NAME
FROM Table1 a
WHERE NOT EXISTS
(SELECT 1
FROM Table2 b
WHERE b.id = a.id
AND b.type_id = :P2_TEST_TYPE
AND mypackage.get_category_id(b.parent_id) <> mypackage.get_category_id(:P2_PARENT_ID)
AND b.status = 'NEW'
AND mypackage.get_type_id(TO_NUMBER(:P2_TEST_TYPE)) IN ('TYPE1', 'TYPE2')
UNION ALL
SELECT 1
FROM Table2 b
WHERE b.id = a.id
AND b.type_id = :P2_TEST_TYPE
AND b.status = 'NEW'
AND mypackage.get_type_id(TO_NUMBER(:P2_TEST_TYPE)) = 'TYPE3'
);