1

我有 2 个表、订阅者和发送日志。我需要选择所有订阅者,但在 Sendlog 表中排除符合我的条件的记录。

标准是他们是“PowerUser”,SubscribePreference = 1,并且他们从未收到过“GoPro”电子邮件

我在这里有一个 SQL 小提琴来表示它,但无法弄清楚查询

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

在此示例中,我想退回 Dave、Ed 和 Frank,因为他们从未收到过“GoPro”电子邮件

有人可以帮我吗?

4

2 回答 2

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

于 2013-04-25T23:02:52.870 回答
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 的外键并将它们加入其中。上面的查询可以工作,但使用整数和适当的键会更快。

于 2013-04-25T23:23:22.293 回答