NOT IN子句在检查条件时省略 NULL 值。
INPUT
ID NAME
1 A
2 <null>
3 C
SELECT... FROM...
WHERE NAME NOT IN ('C')
只返回ID值1.我需要1和1 2。
可以这样做吗?
答案 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')