Oracle SQL 排除特定类型的多行选择精确的两行
Posted
技术标签:
【中文标题】Oracle SQL 排除特定类型的多行选择精确的两行【英文标题】:Oracle SQL exclude specific type multiple rows select with exact two rows 【发布时间】:2016-11-24 12:30:01 【问题描述】:我正在尝试编写 oracle sql 从表 ABC 中选择所有 emplid 不包括具有三个特定角色的 empid。示例如下 - 表 1= ABC EMPLID 角色 ______________________ 111 苹果 111 芒果 111 红苹果 222 苹果 222 橙色 222 红芒果 222 香蕉 333 苹果 333 橙色 444 苹果 444 芒果 444 红芒果 555 葡萄 666 橙色 666 葡萄 666 蓝莓 表 2 = 详细信息 EMPLID 姓名 电子邮件 __________________________________ 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
【讨论】:
感谢您的回复。现在将测试所有场景:-) 基本上,以下行也必须包含 - 777, Apple, Red_Apple, Mango, Avocado, Lime Exclude Emplid 只有三行 Apple, Mango, Red%以上是关于Oracle SQL 排除特定类型的多行选择精确的两行的主要内容,如果未能解决你的问题,请参考以下文章