У меня есть следующая таблица, и я хочу отфильтровать определенное значение, но сохраняя нулевые (пустые) строки. категория продавать Яблоко 1 Апельсин 3 Банан 2 null 1 ...

0
tlqn 3 Мар 2021 в 17:25

3 ответа

Лучший ответ

Если у вас есть эта схема:

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
1
gbeaven 3 Мар 2021 в 14:42

Вы можете использовать COALESCE ИЛИ NVL:

SELECT *
FROM table AS t 
WHERE COALESCE(t.category,'[notfruit]') NOT IN ('Orange') 
0
eshirvana 3 Мар 2021 в 14:42

Redshift не поддерживает явный NULL - безопасный оператор равенства. Но вы можете легко эмулировать это, используя:

where (fruit = 'Orange') is not true

is not true обрабатывает значения NULL в соответствии с интуицией большинства людей, т.е. не возвращает NULL, но распознает, что они не верны.

Стандарт SQL (и в настоящее время Postgres) поддерживает такое официальное сравнение:

where fruit is distinct from 'Orange'

Однако Redshift не поддерживает этот синтаксис.

0
Gordon Linoff 3 Мар 2021 в 14:59