雪花中的不相等究竟如何工作?

How does not equal in snowflake exactly work?

我有一个雪花查询,它有一个名为状态的字段。该字段包含 null 或 'deleted'

当我执行以下操作只删除它时,它起作用了:

select * from tbl_1 where status = 'deleted'

当我尝试排除所有已删除的内容时,它排除了所有内容,没有返回任何记录。这是我试过的

select * from tbl_1 where status != 'deleted'

select * from tbl_1 where status <> 'deleted'

两者都不行。有人能告诉我为什么或在雪花中这样做的正确方法是什么吗? 提前致谢!

您可以尝试以下哪些因素导致状态为空且无法搜索。

select * 来自 tbl_1 其中 IS_NULL_VALUE(状态:no_value) != 'deleted'

https://docs.snowflake.com/en/sql-reference/functions/is_null_value.html

我认为你应该在这里使用 EQUAL_NULL。 EQUAL_NULL 比较两个表达式是否相等。该函数是 NULL-safe,这意味着它将 NULL 视为比较相等性的已知值。请注意,这与 EQUAL 比较运算符 (=) 不同,后者将 NULL 视为未知值。

https://docs.snowflake.com/en/sql-reference/functions/equal_null.html#equal-null

CREATE TABLE NULL_TEST(PRODUCT VARCHAR, STATUS VARCHAR);

INSERT INTO NULL_TEST VALUES('1111','DELETED');
INSERT INTO NULL_TEST VALUES('1112',NULL);


select * from NULL_TEST where NOT EQUAL_NULL(status,'DELETED');

使用 NVL 因为它只是将 NULL 转换为另一个您可以与之比较的值

NVL 文件 here

我已经使用以下查询对 return 值 2、3(不是 'deleted')

进行了测试
Select * 
     from
    values (1,'deleted'),(2,NULL),(3,null),(4,'deleted')
      WHERE NVL(,'N/A')!='deleted';

因此,对于您的情况,请使用 SQL

select * from tbl_1 where NVL(status,'N/A') != 'deleted';