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