2008-09-11 20 views
0

Ich versuche etwas zu tun, was ich millionenfach gemacht habe und es funktioniert nicht, kann mir jemand sagen warum?Suche nach fehlenden E-Mails in SQL Server

Ich habe eine Tabelle für Leute, die in Bewerbungen gesendet, und es hat die E-Mail-Adresse in dem ...

ich herausfinden wollen, ob eine dieser Personen hat auf der Website angemeldet. Die aspnet_Membership-Tabelle enthält alle Personen, die sich auf der Website angemeldet haben.

Es gibt 9472 Stellensuchende, mit einzigartigen E-Mail-Adressen.

Diese Abfrage erzeugt 1.793 Ergebnisse:

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

Dies deutet darauf hin, dass es 7679 (9472-1793) E-Mails von Menschen, die auf der Website angemeldet sind. Seit 1793 von ihnen übereinstimmte, würde ich erwarten, dass der Rest von ihnen nicht übereinstimmen ... aber wenn ich die Abfrage dafür mache, bekomme ich nichts!

Warum gibt diese Abfrage mir nichts ???

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

Ich weiß nicht, wie das funktioniert nicht sein könnte - es sagt im Grunde „Zeige mir alle E-Mails, die in der jobseeker Tabelle sind, aber nicht in der aspnet_Membership Tisch ...

Antwort

3

Wir hatten kürzlich ein sehr ähnliches Problem, bei dem die Unterabfrage manchmal Nullwerte zurückgab. Dann behandelt die in Anweisung null in einer seltsamen Art und Weise, ich denke, den Wert immer passend, so dass, wenn Sie Ihre Abfrage ändern:

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

es funktionieren kann ....

2

Sie könnten haben viele Duplikate gibt, ich bin die Abfrage Fehler aus der Spitze von meinem Kopf nicht zu sehen, aber Sie könnten versuchen, es auf diese Weise zu schreiben.

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

Sie können auch eine GROUP BY oder DISTINCT in dort werfen Duplikate loswerden

0

Sie exists stattdessen verwenden könnten von in wie folgt aus:

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

Sie sollten eine bessere Leistung und die ‚seltsame‘ Verhalten vermeiden (was ich vermute, ist mit Nullwerten/Ergebnisse zu tun), wenn in verwenden.

Verwandte Themen