2015-10-28 80 views
-1

當我使用的語句的錯誤結果在MySQL

select Name, Id 
from employee 
where Id in (1234,1234,NULL); 

我得到正確的結果。然而,當我寫的查詢

select Name, Id 
from employee 
where Id not in (1234,5678,NULL); 

我只是得到「空集」作爲結果。請告訴我爲什麼會發生這種情況。我正在使用MYSQL。

回答

1

因爲與null比較未知的結果。您必須使用IS運營商與null

select Name, Id 
from employee 
where Id not in (1234,3456) 
and Id is not null 
0

正如其他人說,NULL比較什麼結果爲UNKNOWN(除了TRUEFALSE第三邏輯狀態要擴大你的兩個表達式:

  1. Id in (1234,1234,NULL) =>Id = 1234 or Id = 1234 or Id = NULL =>Id = 1234 or Id = 1234 or UNKNOWN

    TRUE or <anything>的計算結果爲TRUE,所以如果Id = 1234返回 TRUE,整個expresison是TRUE

  2. Id not in (1234,5678,NULL) =>Id != 1234 and Id != 5678 and Id != NULL =>Id != 1234 and Id != 5678 and UNKNOWN

    <anything> and UNKNOWN的計算結果爲UNKNOWN,所以對於沒有行會的條件評估爲TRUE,從而沒有行返回