我有一个如下所示的输出数据
使用的查询: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
答案 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
的原因是您使用的AND
。 AND
表示两个条件都必须为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)