Tôi đã có một truy vấn (cho Postgres và Informix) với một NOT IN
mệnh đề chứa một truy vấn con mà trong một số trường hợp trả về NULL
các giá trị, khiến mệnh đề đó (và toàn bộ truy vấn) không trả về bất cứ điều gì.
Cách tốt nhất để hiểu điều này là gì? Tôi đã nghĩ về NULL
một cái gì đó không có giá trị, và do đó không mong đợi truy vấn thất bại, nhưng rõ ràng đó không phải là cách nghĩ chính xác NULL
.
x <> NULL
là giải quyếtFALSE
, bạn sẽNOT (x <> NULL)
đánh giáTRUE
và không. Cả hai đánh giáUNKNOWN
. Thủ thuật là một hàng chỉ được chọn nếuWHERE
mệnh đề (nếu có) ước tính thànhTRUE
- một hàng bị bỏ qua nếu mệnh đề ước lượng thành mộtFALSE
hoặcUNKNOWN
. Hành vi này (nói chung và đối vớiNOT IN
vị từ nói riêng) được quy định bởi tiêu chuẩn SQL.