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列不能为0,b列不能为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列不能为0,b列不能为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))