2016-11-30 14 views
0

こんにちは:私のmarketingImportテーブルから私のhardBounceテーブルに存在しない電子メールだけを取得するのに苦労します。MySQL(OSX)LEFT JOINが期待通りに動作しない

私はLEFT JOINにさまざまなアプローチを試みましたが、私は常にmarketingTable(すべて300Kレコード)を取得しています。私のhardBounceテーブルには約80Kの「悪い」電子メールがあるので、220Kレコードしか取得できません。これらは私の結果から除外されるべきです。

また、WHEREをANDで置き換えてみました(ON句の一部にする)が、同じ結果が得られました。

これは私のSQLです:

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

テーブル:

-marketingImportはVARCHAR(255)であるフィールド '電子メール' を含んでいる、NULL可能インデックス

-hardBounceは、単一のフィールドが含まれています「電子メール」はvarchar(255)、ヌル可能なUNIQUEインデックス(PKではない)

私は何が欠けていますか?私はすべての記事を読んだ...そして、私の目は今水を汲んでいる...

ありがとう。

+0

NOT IN/NOT EXISTS/IS NULL条件を無視して、すべてのレコードを正しい表から戻すことをお勧めします。パフォーマンスは、NOT IN、LEFT JOIN、NOT JOINを使用する方が最良です。しかし、私はまだ結果を得ていません:( –

+0

ミステリーが解決しました。私のhardBounceテーブルの電子メールフィールドは、80K全部に '0D'私はLEFT JOINに固執していますが、私はLEFT JOINを使用していますが、 (MySQL上で)広告として動作しています... –

+0

これは非常によく聞こえますが、以下の2つのクエリがうまくいかなかったので、データ問題であったはずだと思いました!)嬉しいです並べ替えられた... 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

申し訳ありませんが、そこで!単に "NOT IN"でなければなりません。 – 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 
); 

そして、私はあなたがmarketingImportからのすべてのメールを取得することができますので、hardBouncenull価値があるかもしれないと思います。

+0

ありがとう:これも試しました。すべてのレコードが返されています... –

関連する問題