过滤掉特定的值,但不排除NULL行



我有以下表,我想过滤掉一个特定的值,但保留空(空)行。

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

您可以使用COALESCENVL:

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不支持这种语法。

相关内容

  • 没有找到相关文章