bookings
とcontacts
テーブルがあります。予約テーブルにあるすべての電子メールアドレスを取得する必要がありますが、連絡先テーブルにはありません。これはSQLで可能ですか?SQLの相互参照テーブルデータ
予約には160k行、711k連絡先はありますので、タイムアウトになるとアレイを作成できません。コピーと貼り付けもサイズのために難しすぎます。これに対する提案はありますか?
bookings
とcontacts
テーブルがあります。予約テーブルにあるすべての電子メールアドレスを取得する必要がありますが、連絡先テーブルにはありません。これはSQLで可能ですか?SQLの相互参照テーブルデータ
予約には160k行、711k連絡先はありますので、タイムアウトになるとアレイを作成できません。コピーと貼り付けもサイズのために難しすぎます。これに対する提案はありますか?
私はあなたのテーブル構造が似ているかわからないが、これはあなたに適用される場合があります:
SELECT email
FROM bookings a
WHERE NOT EXISTS
(
SELECT email
FROM contacts b
WHERE a.email = b.email
)
これは、そのメールは連絡先の中に発見されていない予約テーブルからすべての電子メールアドレスを選択します表。
あなたの提案された結果は私が望むものですが、これはデータベースをクラッシュしました。 –
私にとってはこれがうまくいくかどうかは分かりません。構文エラーが表示されますか? –
データベース/サーバは、異なる理由でこのクエリを実行するのと同時に便利にクラッシュしました。これはうまくいった。ありがとうございます( –
期待される結果を返すことができNULL
チェックとシンプルLEFT JOIN
:
SELECT B.EmailAddress
FROM Bookings B
LEFT JOIN Contacts C ON C.EmailAddress = B.EmailAddress
WHERE C.EmailAddress IS NULL
あなたはあなたの左の表ではなく、あなたの右の表にあるレコードを見つけるために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を比較するのはあまり効率的ではありません。あなたのテーブルの構造を提供することができれば、より良い解決策があるかもしれません。
私はフィールド 'contact_email'を持つ連絡先テーブルと、フィールド 'email'を持つ予約テーブルを持っています。約711,000の連絡先と160,000の予約テーブルがあります。 –
私は電子メールに基本的な左結合を試みます – Damiano