1
问题我有一组查询,我试图运行,但我有问题让他们一起运行。SQL加入&排除查询
我的设立是在括号列名如下:
- 表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鲜明电子邮件(masterstudies)
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]';
我现在的问题是,我需要通过某种方式对这些查询结合起来,这样我可以在日期范围内获得两个表中的DISTINCT电子邮件的数量,同时不包括查询识别的电子邮件3.
我需要:
- 查询3 = COUNT DISTINCT电子邮件的电子邮件鲜明(在查询3未识别) 的
- 查询2 =计数
- 查询1个不同的电子邮件(在查询3中未标识)
的=计数最终我需要是在日期范围内以获得不同的电子邮件的总计数“的无重复”,因为有位于重复两个表。
这是如何实现的?
我不知道你可以将所有三个查询都放到一个查询中,但是你可以通过使用[NOT IN](http://stackoverflow.com/a/1001197/870729)排除查询3中的查询,条款。 **作为一个澄清**你提到你得到的“计数”,但实际上你得到的所有电子邮件。如果你只是想要计数,为什么不选择'SELECT COUNT(distinct email)FROM ...' –
最后 - 确定你确实需要/想要使用'CROSS JOIN' - 它返回比通常需要的更大的结果,并且很可能被替换为'INNER JOIN'。 –
你可以做一个['UNION'](http:///dev.mysql.com/doc/refman/5.7/en/union.html)query - 'SELECT rfi_log.email as emails,orutrimdb.mastersstudies.email FROM rfi_log CROSS JOIN orutrimdb.mastersstudies ... UNION SELECT DISTINCT NULL,email FROM orutrimdb.mastersstudies ... UNION SELECT DISTINCT email,NULL FROM rfi_log ...' – Sean