ich einige Zeit damit verbracht, diese Abfrage, um herauszufinden, warum nicht, um die Ergebnisse zieht i erwartet:Warum „nicht vorhanden“ SQL-Abfrage Arbeit und „nicht in“ nicht
SELECT * FROM NGS WHERE ESPSSN NOT IN (SELECT SSN FROM CENSUS)
schließlich habe ich versucht, Das Schreiben der Abfrage einen anderen Weg und diese up endete die erwarteten Ergebnisse zu erzielen:
SELECT * FROM NGS n WHERE NOT EXISTS (SELECT * FROM CENSUS WHERE SSN = n.ESPSSN)
Die erste Abfrage scheint besser geeignet und „richtig“. Ich benutze "in" und "nicht in" die ganze Zeit für ähnliche Auswahlen und hatte noch nie ein Problem , dass ich von kenne.
Guter Anruf! Ich habe gerade überprüft und es gibt einen Nullwert in der Tabelle. Die Abfrage in SELECT * FROM NGS umschreiben, wo ESPSSN NICHT IN (SELECT ISNULL (SSN, '') FROM CENSUS) gab mir den erwarteten Wert. Ich frage mich, was soll ich verwenden? – Josh
@Josh: Ich habe standardmäßig "nicht vorhanden", weil es nicht unter der "Null" -Gotcha leidet. Wenn Sie jedoch Leistungsprobleme haben, kann es sich lohnen, den Abfrageplan für beide Optionen zu prüfen. – Andomar
@Josh, @Andomar: ISNULL wird die Verwendung eines Index ungültig machen, der möglicherweise vor – gbn