gpt4 book ai didi

sql - 为什么 null 在 WHERE 中等于整数?

转载 作者:行者123 更新时间:2023-11-29 13:02:57 25 4
gpt4 key购买 nike

我正在使用普通连接进行查询,目的是找到用户尚未投票的最新记录:

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。

最佳答案

你是对的,“NULL 不能等于任何东西”
你缺少的是 NULL cannot be unequal, either .

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;

您在 WHERE 子句中有一个引用 vv 的附加条件:AND vv.user_id != 39。可能期望 NULL != 39 符合条件,但事实并非如此。见:

基本上三种不同的技术可以做到这一点:

关于sql - 为什么 null 在 WHERE 中等于整数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23618167/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com