我有以下表,我想过滤掉一个特定的值,但保留空(空)行。
category sell
Apple 1
Orange 3
Banana 2
null 1
Orange 2
null 1
我尝试了不同的方法,但查询一直过滤掉null行。例如,我只想过滤掉带有橙色的行,输出表应该是:
category sell
Apple 1
Banana 2
null 1
null 1
SELECT *
FROM table AS t
WHERE t."sell" NOT IN ('Orange')
我也试过
WHERE t."sell" != 'Orange'
或
WHERE t."sell" NOT LIKE '%Orange%'
所有返回的结果都排除具有空值的行。如有任何建议,我将不胜感激。
如果您有这样的模式:
create table transaction(
category varchar(15),
sell int
)
insert into transaction(category, sell)
values('Apple',1), ('Orange',3), ('Banana',2), (null,1), ('Orange',2), (null,1)
你可以使用:
select *
from transaction
where category != 'Orange'
or category is null
结果是:
category sell
Apple 1
Banana 2
null 1
null 1
您可以使用COALESCE
或NVL
:
SELECT *
FROM table AS t
WHERE COALESCE(t.category,'[notfruit]') NOT IN ('Orange')
Redshift不支持显式的NULL
安全相等运算符。但是您可以使用:
where (fruit = 'Orange') is not true
is not true
处理NULL
值符合大多数人的直觉——即不返回NULL
,但认识到它们不是真的。
SQL标准(和现在的Postgres)支持这样的官方比较:
where fruit is distinct from 'Orange'
但是,Redshift不支持这种语法。