我有三个不同的表 - 订阅者,取消订阅者,大量订阅者。
我想从大众订阅者表中打印出每封电子邮件。但是,只有在订阅者和取消订阅者表中都不存在该电子邮件时才能打印。
我知道如何使用数组执行此操作,但我想要一个简单的mysql查询。
mysql查询是什么?
谢谢!
答案 0 :(得分:0)
你可以使用子查询来做到这一点(这很慢!请在下面的行中阅读):
SELECT email
FROM subscribers
WHERE email NOT IN(SELECT email FROM unsubscribers)
但是,这对性能非常不利。我建议您只使用一个表subscribers
来更改数据库的方式,并添加一列active
(tinyint)。当有人取消订阅时,您将该值从1设置为0.之后,您可以保留在1个表中:
SELECT email FROM subscribers WHERE active=1
由于某些原因,这更快:
除了这个更快的事实,它对您的数据库结构更好。你不希望两张表几乎一样,使用电子邮件。这将创建重复数据和错位机会
答案 1 :(得分:0)
你听起来像是一个没有太多SQL经验的人。你的头衔指向正确的方向。以下是将组件放在一起的方法:
select m.*
from mass_subscribers m
where not exists (select 1 from subscribers s where s.email = m.email) and
not exists (select 1 from unsubscribers u where u.email = m.email);
对于此类查询, NOT EXISTS
恰好是一个非常好的选择;它在MySQL和其他数据库中通常非常有效。
答案 2 :(得分:0)
没有子查询,使用连接
SELECT mass_subscribers.*
FROM mass_subscribers ms
LEFT JOIN subscribers s ON ms.email=s.email
LEFT JOIN unsubscribers us ON us.email=s.email
WHERE
ms.email IS NULL
AND
us.email IS NULL