NOT IN子句和NULL值

时间:2013-07-09 09:21:59

标签: mysql sql oracle

NOT IN子句在检查条件时省略 NULL 值。

INPUT  
ID  NAME  
1   A  
2   <null>
3   C

SELECT... FROM...
WHERE NAME NOT IN ('C')

只返回ID值1.我需要1和1 2。

可以这样做吗?

4 个答案:

答案 0 :(得分:5)

WHERE NAME NOT IN ('C') OR NAME IS NULL

答案 1 :(得分:3)

要么检查NULL值

select *
from not_in
where name not in ('C') or name is null;

或者您可以使用coalesce转换任何其他字符中的NULL值。我在下面的示例中使用''。

select *
from not_in
where coalesce(name, ' ') not in ('C');

答案 2 :(得分:2)

正确的SQL将是

SELECT... FROM...
WHERE NAME NOT IN ('C')
or NAME is NULL

那是因为与NULL的任何比较也会产生NULL(即不是真或假)。 (感谢@Jack)

参见:
 MySQL: Why is NULL ignored in MySQL?
Working of Null Values

答案 3 :(得分:0)

SELECT... 
FROM...
WHERE NAME NOT IN ('C') 
    OR NAME IS NULL

SELECT... 
FROM...
WHERE ISNULL(NAME, '') NOT IN ('C')