繁体   English   中英

SQL查询以排除出现在其他行中的记录?

[英]SQL query to exclude records that appear in other rows?

我不确定如何说出这个问题,但这是问题所在。

我有一个电子邮件的表subscribers ,如下所示:

Email - Event_id
1@1.com - 123
1@1.com - 456
2@2.com - 123
3@3.com - 123
3@3.com - 123

我有一个看起来像这样的查询:

select email as "Email Address"

from subscribers

where event_id='123'

GROUP BY email

我希望此查询的结果为:

Email Address
2@2.com
3@3.com

但显然基于我得到的查询:

Email Address
1@1.com
2@2.com
3@3.com

基本上我想排除与其他事件ID相关联的电子邮件,并仅收集出现在ID为123 ONLY事件中的电子邮件

只需使用having子句并在那里移动条件:

select email as "Email Address"
from subscribers
group by email
having min(event_id) = max(event_id) and min(event_id) = '123';

这表示电子邮件中的最小event_id与最大值相同(因此全部相等或为NULL ),值为'123'

您可以使用IN过滤您不感兴趣的结果:

select email as "Email Address"
from subscribers
where event_id='123' 
      and email not in(
          select email as "Email Address"
          from subscribers
          where event_id<>'123')
group by email
SELECT email as "Email Address"
FROM subscribers s
WHERE event_id ='123'
  AND NOT EXISTS (SELECT email
                  FROM subcribers s1
                  WHERE event_id <> '123'
                    AND s1.email = s.email)
GROUP BY email

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM