SELECT something
FROM someTable
WHERE idcode NOT IN (SELECT ids FROM tmpIdTable)
kiểm tra bất kỳ giá trị nào trong danh sách.
Tuy nhiên, NOT IN không chịu được NULL. Nếu truy vấn con trả về một tập hợp giá trị chứa NULL, thì không có bản ghi nào được trả về. (Điều này là do bên trong NOT IN được tối ưu hóa thành idcode <> 'foo' AND idcode <> 'bar' AND idcode <> NULL
v.v., điều này sẽ luôn không thành công vì bất kỳ so sánh nào với NULL đều mang lại KHÔNG BIẾT, ngăn toàn bộ biểu thức không bao giờ trở thành ĐÚNG.)
Một biến thể đẹp hơn, có khả năng chịu NULL sẽ là:
SELECT something
FROM someTable
WHERE NOT EXISTS (SELECT ids FROM tmpIdTable WHERE ids = someTable.idcode)
CHỈNH SỬA:Ban đầu tôi cho rằng điều này:
SELECT something
FROM someTable
WHERE idcode <> (SELECT ids FROM tmpIdTable)
sẽ chỉ kiểm tra giá trị đầu tiên. Nó chỉ ra rằng giả định này ít nhất là sai đối với SQL Server, nơi nó thực sự gây ra lỗi của anh ấy:
Msg 512, Level 16, State 1, Line 1 Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.