Spędziłem trochę czasu próbuje dowiedzieć się, dlaczego ta kwerenda nie ciągnie wyniki Spodziewałem:Dlaczego „nie istnieje” pracę zapytań SQL i „nie” nie
SELECT * FROM NGS WHERE ESPSSN NOT IN (SELECT SSN FROM CENSUS)
wreszcie próbowałem pisanie kwerendy inną drogę i to skończyło się oczekiwane wyniki:
SELECT * FROM NGS n WHERE NOT EXISTS (SELECT * FROM CENSUS WHERE SSN = n.ESPSSN)
pierwszego zapytania wydaje się bardziej odpowiednie i „poprawny”. Używam "w" i "nie w" przez cały czas dla podobnych wyborów i nigdy nie miałem problemu z , które znam z.
Dobra rozmowa! Właśnie sprawdziłem i w tabeli jest wartość pusta. Przepisanie zapytania na SELECT * FROM NGS WHERE ESPSSN NOT IN (WYBIERZ ISNULL (SSN, '') Z CENSUS) dało mi oczekiwaną wartość. Zastanawiam się, który powinienem użyć? – Josh
@Josh: Domyślnie "nie istnieje", ponieważ nie cierpi z powodu 'null'. Ale jeśli masz problemy z wydajnością, warto rozważyć plan zapytań dla obu opcji. – Andomar
@Josh, @Andomar: ISNULL unieważni użycie jakiegokolwiek indeksu, który mógł zostać użyty przed – gbn