1

在我的 MySQL 表中,我有一些status= NULL 的行和一些status= 0的行

在查询中选择它们时:

SELECT *
FROM `table`
WHERE `status` != 0

这会忽略0NULL值。

如何仅忽略0值?

4

5 回答 5

5

您可以使用is null谓词:

ifstatus是一个数字字段:

SELECT *
FROM `table`
WHERE `status` != 0
OR `status` IS NULL

ifstatus是一个文本字段:

SELECT *
FROM `table`
WHERE `status` != '0'
OR `status` IS NULL

这是有效的,因为NULL != 0评估为NULLNULL OR TRUE评估为TRUE。包含条件评估为的行NULL被拒绝。

于 2012-12-06T19:24:33.723 回答
1

没试过,但也许这个?

SELECT *
FROM `table`
WHERE `status` IS NULL OR `status` != 0
于 2012-12-06T19:24:44.253 回答
1

从你的 sqlfiddle 来看,它似乎status是一种文本类型,所以这就是你想要的:

SELECT *
FROM mytable
WHERE status IS NULL
OR status != '0'
于 2012-12-06T19:28:44.140 回答
0

如果您想同时排除它们:

SELECT *
FROM mytable
WHERE COALESCE(status,0)  <> 0
    ;
于 2012-12-06T19:36:51.250 回答
0

您可以使用null 安全的等于运算符...

SELECT status
FROM mytable
WHERE not (status <=> 0);

它认为null只是另一个值。 0 <=> null是错误的,与null您通过正常比较得到的相反。

与此处的其他答案一样,如果您的status列恰好是 (var)char 类型,请引用 0。

于 2012-12-06T20:09:38.983 回答