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 排除特定类型的多行选择精确的两行的主要内容,如果未能解决你的问题,请参考以下文章

SQL - 在特定条件下从多行中仅选择一个值

SQL Server 和 Oracle 兼容的多行插入?

具有多个连接和排除的 SQL 查询

oracle 一个字段转多行

Oracle sql使用子查询将多行结果分组为一行

sql求时间差,精确到秒分时