由于某种原因,sqlite3不匹配明显应与之匹配的查询具有NULL值的行。
假设我有一个employees
表,其中包含两列name
和salary
,其中包含以下数据:
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中确认这种行为。
答案 0 :(得分:1)
您无法将NULL
与任何内容进行比较。 SQL中有IS NULL
和IS NOT NULL
运算符来处理它。
正确的查询将是
SELECT *
FROM employees
WHERE salary NOT IN(50000)
OR salary IS NULL;
这是 SQLFiddle 演示