2013-04-25 51 views
1

我有2个表,订户&发送日志。我需要选择所有订阅者,但排除符合发送日志表中的条件的记录。从表A中选择但排除表B中匹配的情况

的标准是,他们是一个“高级用户”,该SubscribePreference = 1和,他们从来没有收到一个“GoPro的”电子邮件

我这里有一个SQL拨弄来表示,但不能找出查询

http://sqlfiddle.com/#!3/3e1a7/6

在此示例中,我想回到大卫,埃德&弗兰克因为从未收到了“GoPro的”电子邮件

有人可以帮助我请在这里?

回答

1

这应该工作:

SELECT DISTINCT s.EmailAddress 
    , 'GoPro' AS CampaignName 
    , sl.SendDate 
FROM Subscribers s 
LEFT JOIN SendLog sl 
    ON s.EmailAddress = sl.EmailAddress 
    AND CampaignName = 'GoPro' 
WHERE s.Entitlement = 'PowerUser' 
AND s.SubscribePreference = 1 
AND sl.EmailAddress IS NULL 

http://sqlfiddle.com/#!3/3e1a7/17

+0

感谢一群完美工作 – user1735894 2013-04-25 23:32:44

0

我相信这将工作:

SELECT DISTINCT Subscribers.EmailAddress 
FROM Subscribers 
LEFT OUTER JOIN SendLog 
     ON Subscribers.EmailAddress = SendLog.EmailAddress 
     AND SendLog.CampaignName = 'GoPro' 
WHERE SendLog.EmailAddress IS NULL 
     AND Subscribers.SubscribePreference = 1 
     And Subscribers.Entitlement = 'PowerUser' 

出于性能的考虑,我建议增加一个ID列作为主键认购表,然后在SendLog表中创建一个名为SubscriberID的外键并将其加入。上面的查询可以工作,但用整数和适当的键可以更快。

相关问题