我有一个简单的查询:
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给没有任何打开的用户。
我尝试了左外连接,联合(有效但后来我有重复),我似乎无法找到如何做到这一点。我确定必须有一个简单的方法,我还没有足够的咖啡。
答案 0 :(得分:0)
检查op.dtupdated
子句中的WHERE
表示过滤掉了不匹配的记录。如果您在ON
的{{1}}条款中执行该操作,则LEFT OUTER JOIN
上的每条记录至少会有一行:
subscribers