日期:2014-05-16  浏览次数:20457 次

一个 "NOT IN" 引发的错误

???? 前几天用到 “NOT IN” 用做条件过滤时,发现少了部分数据,后来仔细查看数据时发现将查询字段为 NULL 状态的记录忽略掉了。记录下来,以备日后总结。

?

???? 实例如下:

1. 数据库users表中存在如下记录:

?

2. 查询 email 不为 “aa@test.com” 的记录:

SELECT * FROM users WHERE email NOT IN ('aa@test.com');

?发现查询结果如下:

3. 以上查询方式是错误的,应该照顾到email字段为NULL的状态情况。

SELECT * FROM users WHERE (email IS NULL OR email NOT IN ('aa@test.com'));

?查询结果如下:

?ok了!

?