MYSQL语法在评估时不等于null

use*_*273 48 mysql sql

我遇到了mysql查询的问题.我想排除2的值.所以我想我会做以下事情:

table products

id | name     | backorder
-------------------
1  | product1 | NULL
2  | product2 | NULL
3  | product3 | 2

SELECT name from `products` p
WHERE backorder <> '2'
Run Code Online (Sandbox Code Playgroud)

但是,这并没有给出product1产品2的预期结果.它给出了一个空结果表.

另一方面,如果我使用

SELECT name from `products` p
WHERE backorder = '2'
Run Code Online (Sandbox Code Playgroud)

然后它产生:product3.但是我希望得到那些不等于2的记录.

有些东西不适用于<>'2'.可能是NULL值正在抛弃它吗?任何人都可以建议修复.提前致谢!

Joh*_*Woo 67

使用IS NULLIS NOT NULL比较NULL值,因为它们只是未知的.

SELECT name 
from   products p
WHERE  backorder IS NULL OR backorder <> 2
Run Code Online (Sandbox Code Playgroud)


sim*_*eco 14

您可以使用:

SELECT `name` FROM `products` `p`
WHERE NOT `backorder` <=> '2'
Run Code Online (Sandbox Code Playgroud)

要么

SELECT `name` FROM `products` `p`
WHERE !(`backorder` <=> '2')
Run Code Online (Sandbox Code Playgroud)

  • 哇,这太棒了。我不知道 `&lt;=&gt;` 的存在。我正在用更多背景信息更新您的答案...... (3认同)

小智 7

很抱歉打开这个

我们也可以使用它

SELECT name 
from   products p
WHERE  COALESCE(backorder,1)  <> 2
Run Code Online (Sandbox Code Playgroud)