Sql 筛选两列中的0或null值

Sql 筛选两列中的0或null值,sql,oracle,Sql,Oracle,我有一个如下所示的输出数据 使用的查询:从表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 那么我只得到你想要

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

使用的查询:
从表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
那么我只得到你想要的
磁盘

WHERE a != 0 OR b != 0  -- get records with at least one of [a, b]
如果这些列中碰巧有空值,它们将被排除,就像0一样(因为
NULL!=0
的计算结果为false)。

您希望

WHERE a != 0 OR b != 0  -- get records with at least one of [a, b]
如果这些列中碰巧有空值,它们将被排除,就像0一样(因为
NULL!=0
的计算结果为false)。

尝试以下方法:

SELECT
    *
FROM
    table1
WHERE
    NOT (coalesce(a, 0) = 0 AND coalesce(b, 0) = 0)
试试这个:

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

使用where子句只获得
磁盘
的原因是您使用的
表示这两个条件都必须为真,因此a列不能为0b列不能为0

仅当满足此条件时,才会显示结果。在您的示例中,只有
磁盘
数据集满足该条件

要实现您想要的,请使用

为了过滤
NULL
值,您可以检查
是否为NULL
如下:

WHERE (a <> 0 AND a IS NOT NULL) OR (b <> 0 AND b IS NOT NULL)
其中(a0和a不为NULL)或(b0和b不为NULL)

使用where子句只获得
磁盘的原因是您使用的
表示这两个条件都必须为真,因此a列不能为0b列不能为0

仅当满足此条件时,才会显示结果。在您的示例中,只有
磁盘
数据集满足该条件

要实现您想要的,请使用

为了过滤
NULL
值,您可以检查
是否为NULL
如下:

WHERE (a <> 0 AND a IS NOT NULL) OR (b <> 0 AND b IS NOT NULL)
其中(a0和a不为NULL)或(b0和b不为NULL)

可以使用
过滤
null
,或者不为null
。示例
从交货日期不为空的收据中选择*@Justplayit94不要把事情复杂化。如果
a
NULL
a!=0
的计算结果不为true。@您的回答提到它不能处理空值,但这不对,它可以很好地处理它们。您可以删除该通知。可以使用
过滤
null
,或者不为null
。示例
从交货日期不为空的收据中选择*@Justplayit94不要把事情复杂化。如果
a
NULL
a!=0
的计算结果不为true。@您的回答提到它不能处理空值,但这不对,它可以很好地处理它们。您可以删除该通知。
where(a,b)(0,0))
where(a,b)(0,0))