Một lý thuyết Câu hỏi ...đâu Khoản bỏ Rows nếu NULL xảy ra
Khi một tập hợp các truy vấn như đưa ra dưới đây là bắn rồi ...
Create table Temp1(C1 varchar(2))
Create table Temp2(C1 varchar(2))
insert into Temp1 Values('A'),(NULL),('B')
insert into Temp2 Values('B'),(NULL),('C'),(NULL)
select *from Temp1 A,Temp2 B
where A.C1 <> B.C1
... mang đến cho ...
Tôi đã sử dụng A.C1 <> B.C1
trong mệnh đề Where
.
Nhưng tôi mong đợi ...
Để kết quả như đầu ra tôi cần phải sử dụng ISNULL(A.C1,'') <> ISNULL(B.C1,'')
trong mệnh đề Where
mong đợi.
Câu hỏi của tôi là tại sao tôi cần phải sử dụng ISNULL
mỗi lần để nhận được kết quả như mong đợi, vì NULL
không bằng bất kỳ dữ liệu chuỗi nào.
Bởi vì null có ý nghĩa đặc biệt không có giá trị. bất kỳ so sánh nào trong đó một bên là null sẽ mang lại giá trị rỗng và đánh giá sai - hãy đọc tại đây http://msdn.microsoft.com/en-us/library/ms191504(v=sql.105).aspx –
Mọi thứ được so sánh với 'NULL' luôn trả về 'NULL' (không xác định) không đúng hoặc sai và do đó không thể đáp ứng tiêu chí của bạn. –