使用包含运算符时,Sqlite3不匹配具有NULL值的行

时间:2014-03-21 06:01:14

标签: sqlite

由于某种原因,sqlite3不匹配明显应与之匹配的查询具有NULL值的行。

假设我有一个employees表,其中包含两列namesalary,其中包含以下数据:

sqlite> SELECT * FROM employees;
id               name             salary
---------------  ---------------  ---------------
1                John Smith       10000
2                Mary Anderson    20000
3                David White      NULL

执行以下查询会导致:

sqlite> SELECT * FROM employees WHERE salary NOT IN (10000);
id               name             salary
---------------  ---------------  ---------------
2                Mary Anderson    20000

我不应该期望id = 3的行在列表中吗?为什么不在名单上?我已经能够在sqlfiddle中确认这种行为。

1 个答案:

答案 0 :(得分:1)

您无法将NULL与任何内容进行比较。 SQL中有IS NULLIS NOT NULL运算符来处理它。

正确的查询将是

SELECT * 
  FROM employees 
 WHERE salary NOT IN(50000) 
    OR salary IS NULL;

这是 SQLFiddle 演示