2008-09-11 10 views
0

何百万回も実行したことがありますが、それは機能していません。SQL Serverで不足している電子メールを見つける

私は履歴書に送られた人々のためのテーブルを持っており、それはそれで自分のメールアドレスを持っている...

私はこれらの人々のいずれかがウェブサイトにサインアップしていないかどうかを確認します。 aspnet_Membershipテーブルには、Webサイトに登録されているすべての人がいます。

求職者は一意で、9472人あります。

select j.email from jobseeker j 
join aspnet_Membership m on j.email = m.email 

これはウェブサイトにサインアップされていない人々の7679(9472から1793)のメールがなければならないことを示唆している:

このクエリは、1793年の結果を生成します。 1793年にDIDが一致して以来、私はそれらの残りの部分が一致しないことを期待しています...しかし、私がその質問をすると、私は何も得られません!

なぜこのクエリは私に何も与えませんか?

select j.email 
from jobseeker j 
where j.email not in (select email from aspnet_Membership) 

私はそれが動作しないことができる方法を知っていない - それは、基本的に求職者テーブルにではなくaspnet_Membershipテーブルにあるすべてのメールを見せて」と言う...

答えて

3

サブクエリがnull値を返すことがあった最近、非常によく似た問題がありました。その後、文のあなたがあなたのクエリを変更した場合ので、私は、常に値に一致すると考え、奇妙な方法でnullの扱い:....

select j.email 
from jobseeker j 
where j.email not in (select email from aspnet_Membership 
         where email is not null) 

それが動作する可能性があり

2

あなたは可能性があり

SELECT j.email 
FROM jobseeker j 
LEFT JOIN aspnet_Membership m ON m.email = j.email 
WHERE m.email IS NULL 

ます。また、そこにGROUP BYまたはDISTINCTをスローする可能性があります:私は私の頭の上からクエリエラーが表示されませんが、あなたはそれを書くこの方法を試してみてくださいそこに重複がたくさんあります重複を取り除く。

0

を代わりにexistsを使用することができますこのようなinの:

Select J.Email 
From Jobseeker j 
Where not exists (Select * From aspnetMembership a where j.email = a.email) 

あなたはより良いパフォーマンスを取得し、inを使用しているとき(私はnull値/結果と行うことです容疑者)「奇妙な行動を避けるべきです。

関連する問題