sql server LIMIT with where但至少包含一次

时间:2013-04-26 23:44:56

标签: sql sql-server union where-clause

我有一个简单的查询:

SELECT subs.id_number, 
       op.dtupdated as dtopened
FROM subscribers AS subs
LEFT OUTER JOIN messages AS msg
ON msg.id_number = subs.id_number
LEFT JOIN email_opens AS op
ON op.message_id = msg.message_id
WHERE op.dtupdated  > dateadd(month,-3,CURRENT_TIMESTAMP)

基本上我试图获取一个表格中的所有记录,该表格跟踪电子邮件打开的时间(email_opens),该表格通过id_number字段与订阅者相关联。我希望在过去3个月内打开所有电子邮件以及相关的id_number,但我还想在订阅者表中至少包含一次所有id-number。

问题是我的where子句删除了过去3个月内从未发过任何打开过的电子邮件的所有记录,但是我希望包含一条带有id_number和“NULL”的记录作为dtopened给没有任何打开的用户。

我尝试了左外连接,联合(有效但后来我有重复),我似乎无法找到如何做到这一点。我确定必须有一个简单的方法,我还没有足够的咖啡。

1 个答案:

答案 0 :(得分:0)

检查op.dtupdated子句中的WHERE表示过滤掉了不匹配的记录。如果您在ON的{​​{1}}条款中执行该操作,则LEFT OUTER JOIN上的每条记录至少会有一行:

subscribers