简体   繁体   English

简单的 MySQL SELECT 查询和子句

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM