2016-11-30 30 views
0

嗨:努力只檢索我的marketingImport表中不存在於我的hardBounce表中的那些電子郵件。MySQL(OSX)LEFT JOIN不按預期方式工作

我嘗試了各種方法到左連接,但我總是得到整個marketingTable(全部300K記錄)。我應該只能獲得大約220K條記錄,因爲我的hardBounce表中存在大約80K個'不好'的電子郵件:這些郵件應該從我的結果中排除。

我也嘗試用AND替換(使它成爲ON子句的一部分),但得到了相同的結果。

這是我的SQL:

SELECT marketingImport.email FROM marketingImport 
LEFT JOIN hardBounce ON marketingImport.email = hardBounce.email 
WHERE hardBounce.email IS NULL; 

表:

-marketingImport包含字段 '電子郵件',這是一個varchar(255),可爲空指數

-hardBounce包含一個單場'email'是一個varchar(255),可爲空的UNIQUE索引(不是PK)

我錯過了什麼?我確實閱讀過所有帖子......而我的眼睛正在澆水......

謝謝。

+0

似乎所有建議的方法都會從右表中返回所有記錄,忽略NOT IN/NOT EXISTS/IS NULL條件。使用NOT IN,然後LEFT JOIN,然後不存在---但是我仍然沒有得到我的結果:(。 –

+0

神祕解決了。看起來我的hardBounce表的電子郵件字段在所有80K中都添加了'0D'記錄,因此一致的感知故障,這個附件可能發生在導出/ CSV /導入過程中I使用REPLACE子句更新所有行然後,下面的所有建議都奏效了,謝謝你的幫助,我堅持使用LEFT JOIN,現在按照廣告標準工作(在MySQL上)。Whew ... –

+0

這非常好聽,我認爲它一定是一個數據問題,因爲下面的兩個查詢不起作用!)很高興你已經得到它排序... LEFT JOIN可能是一個很好的選擇。 – Nerdwood

回答

1

如何使用子查詢而不是LEFT JOIN

SELECT marketingImport.email 
FROM marketingImport 
WHERE marketingImport.email NOT IN (
    SELECT hardBounce.email 
    FROM hardBounce 
); 
+0

嗨:這似乎不是有效的MySQL語法...我在SQL工作臺中得到語法錯誤...我也擔心子查詢會產生低效,但願意嘗試:) –

+0

對不起,離開了「IS」在那裏!應該只是「不在」。 – Nerdwood

+0

drats:相同的結果:所有274580記錄正在返回0.0020秒 –

0

嘗試使用NOT EXISTS

SELECT marketingImport.email FROM marketingImport 
WHERE NOT EXISTS (
    SELECT 1 FROM hardBounce WHERE hardBounce.email = marketingImport.email 
); 

而且我覺得有可能是null價值hardBounce,這樣你就可以從marketingImport得到所有的電子郵件。

+0

謝謝:也試過這個;所有記錄正在返回... –