为什么在WHERE空相等的整数?(Why does null equal integer in WH

2019-09-26 21:23发布

我做一个平凡的加盟,以寻找最新的记录是,用户没有投票还没有意向的查询:

SELECT
    v.user_id,
    v.version_id,
    vv.user_id
FROM versions v
LEFT JOIN versions_votes vv ON v.version_id = vv.version_id
WHERE vv.user_id != 39;

奇怪的是, 如果vv.user_id为null,不返回行。 这个问题的我承认行人的理解是NULL 不能无所不能-这就是为什么我们要测试IS NULL而不是=NULL摆在首位。

然而,我们在这里 - 如果我修改WHERE子句如下:

WHERE (vv.user_id != 39 OR vv.user_id IS NULL)

查询显示正常工作(也似乎证实NULL被评估到39。

Answer 1:

你是正确的, NULL cannot be equal to anything
你所缺少的是NULL不能是不等的,无论是 。

NULL比任何东西始终是NULL 。 眼下的问题是,你得到了LEFT JOIN错误。 这应该工作:

SELECT v.user_id, v.version_id, vv.user_id
FROM   versions v
LEFT   JOIN versions_votes vv ON v.version_id = vv.version_id
                             AND vv.user_id = 39
WHERE  vv.version_id IS NULL
ORDER  BY v.created
LIMIT  1;

你有一个附加条件引用vv的在WHERE子句: AND vv.user_id != 39 也许期待的是NULL != 39将有资格,但事实并非如此。 在这个相关答案更多细节:
与LEFT JOIN的查询不是为0计数返回行

基本上有三种技术来做到这一点:
它不存在于其他表中选择行



文章来源: Why does null equal integer in WHERE?