75

我在使用 mysql 查询时遇到问题。我想排除 2 的值。所以我想我会做以下事情:

table products

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

SELECT name from `products` p
WHERE backorder <> '2'

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

另一方面,如果我使用

SELECT name from `products` p
WHERE backorder = '2'

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

某些东西无法与<> '2'. 难道是NULL价值观把它扔掉了?任何人都可以建议修复。

提前致谢!

4

4 回答 4

108

使用IS NULLorIS NOT NULL来比较NULL值,因为它们只是未知的。

SELECT name 
from   products p
WHERE  backorder IS NULL OR backorder <> 2
于 2013-04-24T08:06:05.873 回答
45

使用<=>运算符。

您可以使用:

SELECT `name` FROM `products` `p`
WHERE NOT `backorder` <=> '2'

或者

SELECT `name` FROM `products` `p`
WHERE !(`backorder` <=> '2')

有关操作员的更多信息,请参阅此答案<=>

MySQL 中的这个运算符 <=> 是什么?

于 2017-06-23T13:50:21.833 回答
8

抱歉打开这个

我们也可以用这个

SELECT name 
from   products p
WHERE  COALESCE(backorder,1)  <> 2
于 2014-05-07T09:26:40.307 回答
-9

试试这个,看看。

SELECT name from `products` p
WHERE backorder != '2'
于 2013-04-24T08:06:49.700 回答