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