tôi đã dành một thời gian cố gắng tìm ra lý do tại sao truy vấn này không kéo kết quả tôi mong đợi:Tại sao "không tồn tại" việc truy vấn SQL và "không" không
SELECT * FROM NGS WHERE ESPSSN NOT IN (SELECT SSN FROM CENSUS)
cuối cùng tôi đã cố gắng viết các truy vấn một cách khác và này đã kết thúc nhận được kết quả mong đợi:
SELECT * FROM NGS n WHERE NOT EXISTS (SELECT * FROM CENSUS WHERE SSN = n.ESPSSN)
truy vấn đầu tiên có vẻ thích hợp hơn và "đúng". Tôi sử dụng "in" và "not in" tất cả thời gian cho các lựa chọn tương tự và chưa bao giờ gặp sự cố mà tôi biết là.
Cuộc gọi tốt! Tôi vừa kiểm tra và có một giá trị null trong bảng. Viết lại câu truy vấn SELECT * FROM NGS WHERE ESPSSN NOT IN (SELECT ISNULL (SSN, '') TỪ CENSUS) cho tôi giá trị mong đợi. Tôi tự hỏi tôi nên sử dụng cái nào? – Josh
@Josh: Tôi mặc định là 'không tồn tại' vì nó không bị lỗi' null'. Nhưng nếu bạn có vấn đề về hiệu suất, bạn có thể xem xét kế hoạch truy vấn cho cả hai tùy chọn – Andomar
@Josh, @Andomar: ISNULL sẽ vô hiệu hóa việc sử dụng bất kỳ chỉ mục nào có thể đã được sử dụng trước – gbn