[英]Simple MySQL SELECT Query AND Clause
Reviews table:评论表:
+--------------------+
| ID | DESC | MISC |
+--------------------+
| 1 | EDR | NULL |
| 2 | EDR | Mumba |
| 3 | EDR | NULL |
| 4 | YTO | Mumba |
| 5 | YTO | Mumba |
+--------------------+
Query:询问:
SELECT ID
FROM Reviews
WHERE DESC = 'EDR' AND MISC <> 'Sent'
I'm expecting my query to return:我期待我的查询返回:
+----+
| ID |
+----+
| 1 |
| 2 |
| 3 |
+----+
But instead, I get:但相反,我得到:
+------+
| ID |
+------+
| NULL |
+------+
What gives?是什么赋予了?
Almost any comparison to NULL
returns NULL
-- which is treated as FALSE
-- even <>
.几乎所有与
NULL
的比较都会返回NULL
这被视为FALSE
甚至<>
。
So, use a NULL
-safe comparison:因此,使用
NULL
安全比较:
SELECT ID
FROM Reviews
WHERE DESC = 'EDR' AND NOT (MISC <=> 'Sent')
And, I'll point out that there is a standard NULL
-safe comparison in SQL.而且,我要指出,SQL 中有一个标准的
NULL
安全比较。 In your case, that would be: MISC IS NOT DISTINCT FROM 'Sent'
.在您的情况下,那将是:
MISC IS NOT DISTINCT FROM 'Sent'
。 But MySQL has its own syntax.但是 MySQL 有它自己的语法。
A value can't be equal to NULL, nor can it be different from NULL.值不能等于 NULL,也不能不同于 NULL。
It's easier to understand if you see a NULL as 'unknown'.如果您将 NULL 视为“未知”,则更容易理解。
But you can check with IS NULL
但是你可以检查
IS NULL
SELECT ID
FROM Reviews
WHERE DESC = 'EDR'
AND (MISC IS NULL OR MISC <> 'Sent')
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.