Presto查询以根据特定列中的值排除行



这看起来应该很简单,但我想我遗漏了一些东西。

我有一个查询,我从数据库中选择了一堆列,我想排除(例如(province="ontario"或"quebec"的任何行。我试过很多种方法,结果都不一样——都不是我想要的。

select .... from fulldata 
WHERE substr(code, 1, 5) <> '10000' 
AND (province <> 'ontario' OR province <> 'quebec')

这确实可以排除province是其中一个值的行,但它也排除了province为null/blank的所有行——不知道为什么。

我尝试了AND NOT ( stateprovince = 'ontario' OR stateprovince = 'quebec'),得到了相同的结果。

我尝试了AND stateprovince <> ANY(VALUES 'ontario','quebec'),它没有任何影响(所有数据都显示出来,没有任何内容被过滤掉(

即使将其分解为像AND stateprovince <> 'ontario'这样简单的东西,也可以消除ontario数据,但也可以消除不是预期结果的空白。

在写这篇文章的过程中,我想出了一个变通方法,将查询更改为:

...
AND (stateprovince IS NULL OR stateprovince <> 'ontario')
AND (stateprovince IS NULL OR stateprovince <> 'quebec')

这是有效的,但似乎不是"正确"的方式。知道怎么了吗?

我在雅典娜身上使用普雷斯托。

provinceNULL时(想想:"未知"(,那么这个:

(province <> 'ontario' OR province <> 'quebec')

将计算为NULL,过滤掉给定的行。由于NOT (NULL)也是NULL,因此没有简单的方法可以避免这种情况。因此,您需要一个明确的NULL检查:

(province IS NULL OR province NOT IN('ontario', 'quebec'))

或者你可以这样写:

(coalesce(province, '') NOT IN('ontario', 'quebec'))

相关内容

  • 没有找到相关文章

最新更新