SQL 联接和排除查询的问题


Issue with SQL Join & Exclude Query

>我有一组查询,我正在尝试运行,但我在让它们一起运行时遇到问题。

我的设置如下,列名在参数中:

  • 表1(电子邮件/日期)
  • 表2(电子邮件/Date_Submitted)

我已经编写了 3 个查询,每个查询都完美地工作,彼此独立,但我似乎无法弄清楚如何连接它们。

查询 1 - 表 1 中的不同电子邮件 (rfi_log)

SELECT DISTINCT email, date_submitted 
FROM rfi_log 
WHERE date_submitted BETWEEN '[start_date]' AND '[end_date]'

查询 2 - 表 2 中的不同电子邮件(主研究)

SELECT DISTINCT email 
FROM orutrimdb.mastersstudies 
WHERE date BETWEEN '[start_date]' AND '[end_date]'

查询 3 - 联接查询,查找表 1 和表 2
中的重复电子邮件

SELECT rfi_log.email as emails, orutrimdb.mastersstudies.email
FROM rfi_log
    CROSS JOIN orutrimdb.mastersstudies
    ON orutrimdb.mastersstudies.email=rfi_log.email 
    WHERE date_submitted BETWEEN '[start_date]' AND '[end_date]';

我现在的问题是我需要以某种方式组合这些查询,以便我可以在日期范围内从两个表中获取不同电子邮件的计数,同时排除从查询 3 中识别的电子邮件。

我需要以下内容:

  • 查询 3 = 非重复电子邮件的计数
  • 查询 2 = 不同电子邮件的计数(在查询 3 中未标识)
  • 查询 1 = 不同电子邮件的计数(在查询 3 中未标识)

最终,我需要在"删除重复"的日期范围内获取不同电子邮件的总数,因为两个表中都有重复项。

如何做到这一点?

执行此操作

的一种方法是使用聚合union all。 以下内容获取有关每封电子邮件的重复信息:

select email, sum(isrfi) as numrfi, sum(isms) as numms
from ((select email, 1 as isrfi, 0 as isms
       from rfilog
      ) union all
      (select email, 0, 1
       from orutrimdb.mastersstudies
      )
     ) e
group by email;

顶部的聚合为您提供所需的信息:

select numrfi, numms, count(*), min(email), max(email)
from (select email, sum(isrfi) as numrfi, sum(isms) as numms
      from ((select email, 1 as isrfi, 0 as isms
             from rfilog
            ) union all
            (select email, 0, 1
             from orutrimdb.mastersstudies
            )
           ) e
      group by email
     ) e
group by numrfi, numms;

请注意,这还会在单个表中查找重复项。