[英]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.