Khi bạn đang đối phó với NULLs
bạn nên luôn luôn cẩn thận vì 3 lý có giá trị sử dụng trong Sql Server
(khi một vị có thể được đánh giá để TRUE
, FALSE
hoặc UNKNOWN
). Bây giờ ở đây là một tuyên bố cổ điển select
nơi nhiều người mới đến mắc lỗi, cho thấy rằng tuyên bố sẽ trả về tất cả các hàng nơi Age <> 12
bao gồm NULLs
.
Nhưng nếu bạn biết thực tế dễ dàng so sánh NULL
với bất kỳ giá trị nào, ngay cả đến NULL
chính nó sẽ đánh giá là UNKNOWN
thì càng rõ ràng điều gì đang xảy ra. Mệnh đề WHERE
sẽ trả về CHỈ những hàng mà vị từ được đánh giá là TRUE
. Hàng mà vị từ đánh giá là FALSE
hoặc UNKNOWN
sẽ được lọc ra khỏi kết quả.
Bây giờ hãy xem những gì đang diễn ra đằng sau hiện trường.Bạn có 4 hàng:
ID Name Age
1 X 12
2 Y 12
3 null null
4 Z 12
và vị ngữ là:
where Age <> 12
Khi bạn đánh giá vị này cho mỗi hàng bạn nhận được:
ID Name Age Evaluation result
1 X 12 FALSE --(because 12 <> 12 is FALSE)
2 Y 12 FALSE --(because 12 <> 12 is FALSE)
3 null null UNKNOWN --(because NULL <> 12 is UNKNOWN)
4 Z 12 FALSE --(because 12 <> 12 is FALSE)
Bây giờ nhớ rằng WHERE
khoản sẽ chỉ trả lại các hàng mà vị từ đánh giá là TRUE
và rõ ràng là bạn sẽ không nhận được bất kỳ kết quả nào vì không có hàng nào đánh giá được TRUE
.
Nguồn
2015-06-02 09:16:40
NULL không bằng 12 – sqluser
@sqluser: Không. Nó cũng không bằng 12. –
có thể trùng lặp của [Không bằng <>! = Toán tử trên NULL] (http://stackoverflow.com/questions/5658457/not-equal-operator-on-null) –