这是我的Table1
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
是否可以了解teradata?
答案 0 :(得分:5)
它并非特定于Teradata,它在所有RDBMS中都是相同的(或至少应该是相同的)。与NULL的任何比较导致UNKNOWN和NOT IN是ANDed条件:
personid<> 1st_value_in_list AND personid<> 2nd_value_in_list AND ... AND personid<> NULL 强>
这已经多次讨论,例如 NOT IN clause and NULL values
答案 1 :(得分:1)
是。如果子查询中的某个值为NULL,则IN子句不返回任何内容。