如何选择一个表中存在的记录,这些记录不存在于另一个表中,因为知道记录可以保存在多个字段中

时间:2017-09-12 13:59:27

标签: sql left-join union ms-access-2016

这个问题可能已经被问到了,但我还没有看到它。我需要它用于质量控制目的。一个表格是我们应该发送电子邮件的受访者,另一个是已取消订阅的受访者列表,或者我们列入黑名单的受访者列表。
受访者有可能在两个表中都有记录(例如,我们在“受访者电子邮件”列中有一些电子邮件,而“Unsubscribers Email 2”栏中的电子邮件完全相同等。)

表格受访者
名称

电子邮件
电子邮件2
电话
电话2

表取消订阅者
名称

电子邮件
电子邮件2
电子邮件3
电子邮件4
电话

2 个答案:

答案 0 :(得分:0)

这样的事情应该这样做。

SELECT email from respondents LEFT JOIN unsubscribers u1 ON respondents.email = u1.email JOIN unsubscribers u2 on respondents.email = u2.email2 WHERE u1.email is null and u2.email2 is null

但是,我会尝试规范化您的数据库。在您的实例中,我只是将一个date_unsubscribed字段添加到响应者表中,这使得这类事情更容易,并降低了数据库复杂性和存储要求。

答案 1 :(得分:0)

NOT IN将是一种典型的方法:

select r.*
from respondents as r
where r.email not in (select email from unsubscribers) or
      r.email not in (select email2 from unsubscribers) or
      r.email not in (select email3 from unsubscribers) or
      r.email not in (select email4 from unsubscribers) or
      r.email2 not in (select email from unsubscribers) or
      r.email2 not in (select email2 from unsubscribers) or
      r.email2 not in (select email3 from unsubscribers) or
      r.email2 not in (select email4 from unsubscribers);