2014-04-16 60 views
1

這裏是我的表1Null值 - Teradata的

personid 
1 
? 
2 
3 
4 
? 
6 

這裏是我的查詢

select * 
from table2 
where personid not in 
(
select personid 
from table1 
) 

結果是nothing


這裏是我的第二個查詢

select * 
from table2 
where personid not in 
(
select personid 
from table1   
where personid is not null 
) 

結果是ok


問:爲什麼第一個查詢沒有工作?我看不到任何邏輯問題。做null s terewata teradata?

回答

5

它不是特定於Teradata,它在所有RDBMS中都是相同的(或至少應該是相同的)。任何比較未知空的結果,而不是在是一個相與條件:

PERSONID <> 1st_value_in_list和PERSONID <> 2nd_value_in_list和...... 和PERSONID <> NULL

這已經討論過多次,例如 NOT IN clause and NULL values

1

是的。如果子查詢中的某個值爲NULL,則IN子句不返回任何內容。