2016-08-18 19 views
0

bookingscontactsテーブルがあります。予約テーブルにあるすべての電子メールアドレスを取得する必要がありますが、連絡先テーブルにはありません。これはSQLで可能ですか?SQLの相互参照テーブルデータ

予約には160k行、711k連絡先はありますので、タイムアウトになるとアレイを作成できません。コピーと貼り付けもサイズのために難しすぎます。これに対する提案はありますか?

+0

私は電子メールに基本的な左結合を試みます – Damiano

答えて

1

私はあなたのテーブル構造が似ているかわからないが、これはあなたに適用される場合があります:

SELECT email 
FROM bookings a 
WHERE NOT EXISTS 
(
    SELECT email 
    FROM contacts b 
    WHERE a.email = b.email 
) 

これは、そのメールは連絡先の中に発見されていない予約テーブルからすべての電子メールアドレスを選択します表。

+0

あなたの提案された結果は私が望むものですが、これはデータベースをクラッシュしました。 –

+0

私にとってはこれがうまくいくかどうかは分かりません。構文エラーが表示されますか? –

+0

データベース/サーバは、異なる理由でこのクエリを実行するのと同時に便利にクラッシュしました。これはうまくいった。ありがとうございます( –

1

期待される結果を返すことができNULLチェックとシンプルLEFT JOIN

SELECT B.EmailAddress 
FROM Bookings B 
LEFT JOIN Contacts C ON C.EmailAddress = B.EmailAddress 
WHERE C.EmailAddress IS NULL 
0

あなたはあなたの左の表ではなく、あなたの右の表にあるレコードを見つけるためにLEFT JOINを使用することができます -

SELECT DISTINCT b.email_address 
FROM Bookings AS b 
LEFT JOIN Contacts AS c ON (c.email_address = b.email_address) 
WHERE c.email_address IS NULL; 

予約済みの各メールアドレスについては、連絡先テーブルの検索と一致します しかし、WHERE句では、連絡先にない予約メールアドレスのレコードを破棄します。

DISTINCTのキーワードは、固有のメールアドレスをお知らせします。

注:email_addressを比較するのはあまり効率的ではありません。あなたのテーブルの構造を提供することができれば、より良い解決策があるかもしれません。

+0

私はフィールド 'contact_email'を持つ連絡先テーブルと、フィールド 'email'を持つ予約テーブルを持っています。約711,000の連絡先と160,000の予約テーブルがあります。 –

関連する問題