我正在尝试编写oracle sql来从表ABC中选择所有emplids
排除具有三个特定角色的emplids。例子如下 -
表1 = ABC
EMPLID角色
______________________
111
苹果
111
芒果
111
Red_Apple
222
苹果
222
橙色
222
Red_Mango
222
香蕉
333
苹果
333
橙色
444
苹果
444
芒果
444
Red_Mango
555
葡萄
666
橙色
666
葡萄
666
蓝莓
表2 =细节
EMPLID NAME EMAIL
__________________________________
111约翰
info@email.com
222埃里卡
info@email.com
等等....
基本上,在上面的例子中,Apple,Mango和Red%是三个角色
需要排除。 sql应该返回EMPLID和NAME
222,333,555和666.它应排除111和444
我尝试创建子选择,但仍然没有工作.enter code here here。任何建议或帮助
非常感谢。
答案 0 :(得分:0)
使用条件聚合:
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