过滤两列中的0或空值

时间:2016-08-30 08:37:22

标签: sql oracle

我有一个如下所示的输出数据

使用的查询:select * from table 1

表1

name  a   b
pen   0   50
paper 10   0
bike   0   0
candy  0   0 
disk   20  30

输出应为

name  a   b
pen   0   50
paper 10   0
disk   20  30

应该消除a = 0和b = 0

的记录

如果我使用过滤条件

select * 
from table1 
where a!=0 and b!=0

然后我只得到disk

3 个答案:

答案 0 :(得分:3)

你想要

WHERE a != 0 OR b != 0  -- get records with at least one of [a, b]

如果碰巧在这些列中有NULL值,它们将被排除,就像0那样(因为NULL != 0的计算结果为false)。

答案 1 :(得分:0)

试试这个:

SELECT
    *
FROM
    table1
WHERE
    NOT (coalesce(a, 0) = 0 AND coalesce(b, 0) = 0)

答案 2 :(得分:0)

您只使用where-clause获取disk的原因是您使用的ANDAND表示两个条件都必须为true,因此列a不能为0 列b不得为0.

只有满足此条件时,才会显示结果。在您的示例中,只有disk数据集符合条件。

要实现您想要的效果,请改用OR

为了过滤NULL值,您可以像这样检查IS NULL

WHERE (a <> 0 AND a IS NOT NULL) OR (b <> 0 AND b IS NOT NULL)