Snowflake中不等值OR条件查询异常问题咨询
问题解析与解答
这跟Snowflake的等值/不等值比较逻辑没关系,核心是搞混了逻辑表达式的等价性。
先拆解两个SQL的实际逻辑:
第一条SQL:
SELECT * FROM TABLE WHERE ( COLUMN1 <> 'VALUE1' OR COLUMN2 <> 'VALUE1')这个条件的意思是:只要
COLUMN1不等于'VALUE1',或者COLUMN2不等于'VALUE1',就会返回这条记录。也就是说,除了COLUMN1和COLUMN2同时等于'VALUE1'的记录,其他所有行都会被选中——这显然不是你想要的结果。第二条SQL:
SELECT * FROM TABLE WHERE NOT ( COLUMN1 = 'VALUE1' OR COLUMN2 = 'VALUE1')根据逻辑里的德摩根定律,这个表达式等价于:
SELECT * FROM TABLE WHERE COLUMN1 <> 'VALUE1' AND COLUMN2 <> 'VALUE1'意思是只有当
COLUMN1和COLUMN2都不等于'VALUE1'的时候,才会返回记录——这才是你实际需要的筛选逻辑。
关键误区
你最初描述的需求“COLUMN1不等于'VALUE1'或COLUMN2不等于'VALUE1'”是字面的“或”逻辑,但你实际想要的是“排除任何一个列等于'VALUE1'的记录”,这两个逻辑完全不同。前者是放宽筛选(只要一个满足就选),后者是严格筛选(必须两个都不满足才选)。
总结:问题出在对逻辑运算符的理解偏差,和Snowflake的比较规则无关。如果要筛选两个列都不等于'VALUE1'的记录,直接用AND连接两个不等条件,或者用你第二条的NOT写法都可以。
内容的提问来源于stack exchange,提问作者ponnu
相关产品推荐
相关产品推荐

