gpt4 book ai didi

mysql - 为什么带有 != 0 的 SQL 查询不包含 NULL 值?

转载 作者:可可西里 更新时间:2023-11-01 06:44:41 26 4
gpt4 key购买 nike

这是两个测试表的sqlfiddle:http://sqlfiddle.com/#!9/33361/3

tl;dr:为什么带有 != 0 的 SQL 查询不包含 NULL 值?

我正在加入这两个表。我希望看到 tableB.field1 中有 NULLtableB.field1 中有 1 的行,但排除所有在 tableB.field1 中具有 0 的内容。

我认为这个查询(示例 6)应该给我这个结果,但它没有得到空记录。

SELECT * FROM tableA a
LEFT JOIN tableB b ON a.id = b.join_id
WHERE
b.field1 != 0;

我必须使用这个更长的查询(示例 4):

SELECT * FROM tableA a
LEFT JOIN tableB b ON a.id = b.join_id
WHERE
b.field1 != 0 OR b.field1 IS NULL;

只是好奇 - MySQL 怎么不认为 N​​ULL 是 != 0?

当我将条件移动到 ON 子句时,我得到了一个意外的行:

mysql> SELECT * FROM tableA a
-> LEFT JOIN tableB b ON a.id = b.join_id AND b.field1 != 0;
+------+--------+--------+---------+--------+--------+
| id | field1 | field2 | join_id | field1 | field2 |
+------+--------+--------+---------+--------+--------+
| 1 | testA1 | testA1 | 1 | 1 | testB1 |
| 2 | testA2 | testA2 | NULL | NULL | NULL |
| 3 | testA3 | testA3 | NULL | NULL | NULL |
+------+--------+--------+---------+--------+--------+
3 rows in set (0.00 sec)

最佳答案

Why does a SQL query with != 0 not include NULL values?

简短回答:因为 SELECT 0 != NULL 返回 (NULL)

更长的答案:根据MySQL's documentation

You cannot use arithmetic comparison operators such as =, <, or <> to test for NULL.

如果您想在 Select 子句中包含 NULL,则必须借助“IS NULL”或“IFNULL”将其转换为算术表示形式。

您的 SQL 查询可以重写为:

SELECT * 
FROM tableA a
LEFT JOIN tableB b ON a.id = b.join_id
WHERE
IFNULL(b.field1, -1) != 0;

关于mysql - 为什么带有 != 0 的 SQL 查询不包含 NULL 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35922093/

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