Oracle SQL исключает конкретный тип, несколько строк выбираются точно с двумя строками

Я пытаюсь написать оракул sql, чтобы выбрать все emplids из таблицы ABC за исключением emplids с тремя конкретными ролями. Пример таков:

TABLE1= ABC

ОТЛИЧНАЯ РОЛЬ
______________________
111 яблоко
111 манго
111 Red_Apple
222 яблоко
222 оранжевый
222 Red_Mango
222 банан
333 Apple
333 апельсин
444 Apple
444 манго
444 Red_Mango
555 Виноград
666 Оранжевый
666 Виноград
666 черника

ТАБЛИЦА 2 = ДЕТАЛИ

EPLID NAME EMAIL
__________________________________
111 Джон info@email.com
222 Эрика info@email.com
и так далее....

По сути, в приведенном выше примере Apple, Mango и Red% - это три роли, которые необходимо исключить. Sql должен вернуть EMPLID и NAME для 222,333,555 и 666. Он должен исключить 111 и 444

Я попытался создать суб-выборки, но все еще не работает. Введите код здесь. Любой совет или помощь высоко ценится.

1 ответ

Используйте условную агрегацию:

SELECT t1.EMPLID,
       t1.NAME,
       t1.EMAIL
FROM DETAILS t1
INNER JOIN
(
    SELECT EMPLID
    FROM ABC
    GROUP BY EMPLID
    HAVING SUM(CASE WHEN ROLE = 'Apple' OR ROLE = 'Mango' OR ROLE LIKE 'Red%'
                    THEN 1 ELSE 0 END) < 3
) t2
    ON t1.EMPLID = t2.EMPLID
Другие вопросы по тегам