SQL - 如何选择不为0但可能为NULL的值?

时间:2012-12-06 19:22:38

标签: mysql

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

在查询中选择它们时:

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

这会忽略0NULL值。

如何才能忽略0个值?

5 个答案:

答案 0 :(得分:4)

您可以使用is null谓词:

如果status是数字字段:

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

如果status是文本字段:

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

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

答案 1 :(得分:1)

没试过,但也许这个?

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

答案 2 :(得分:1)

根据你的sqlfiddle判断,status是文本类型,所以这就是你想要的:

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

答案 3 :(得分:0)

如果您想将它们排除在外:

SELECT *
FROM mytable
WHERE COALESCE(status,0)  <> 0
    ;

答案 4 :(得分:0)

您可以使用null-safe equals operator ...

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

它将null视为另一个值。 0 <=> null是错误的,而不是通过正常比较获得的null

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