0

何百万回も行ったことをやろうとしていますが、うまくいきません。だれか理由を教えてもらえますか?

履歴書を送った人のテーブルがあり、そこにはメールアドレスが含まれています...

これらの人々の中に Web サイトにサインアップしていない人がいるかどうかを知りたい. aspnet_Membership テーブルには、Web サイトにサインアップしているすべての人が含まれています。

固有のメール アドレスを持つ 9472 人の求職者がいます。

このクエリは 1793 の結果を生成します。

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

これは、Web サイトにサインアップしていない人々の電子メールが 7679 (9472-1793) あるはずであることを示唆しています。1793 個の DID が一致したため、残りは一致しないと予想されますが、そのクエリを実行しても何も得られません。

このクエリで何も返されないのはなぜですか???

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

それがどのように機能しないのかわかりません-基本的には、「jobseekerテーブルにあるが、aspnet_Membershipテーブルにないすべてのメールを表示してください...

4

4 に答える 4

3

最近、サブクエリが null 値を返すことがあるという非常によく似た問題がありました。次に、 in ステートメントは null を奇妙な方法で扱います。常に値に一致すると思うので、クエリを次のように変更すると:

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

それはうまくいくかもしれません....

于 2008-09-11T18:20:05.927 に答える
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 を投げることもできます。

于 2008-09-11T18:15:21.677 に答える
1

あるテーブルから別のテーブルにないすべての行を返す 5 つの方法も参照してください。

于 2008-09-11T22:33:50.073 に答える
0

次のようexistsに代わりに使用できます。in

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

を使用すると、パフォーマンスが向上し、「奇妙な」動作(null値/結果に関係していると思われる)を回避する必要がありますin

于 2008-09-11T21:32:45.010 に答える