如何在Big Query中使用不忽略Null的where语句

时间:2015-09-14 12:54:13

标签: google-bigquery

我有点惊讶地发现Google Big Query中的WHERE语句忽略了NULLS。有谁知道更好的方法吗?

我有以下数据集:

Name     Score
Allan     20           
Brian     NULL
Clare     30

假设我想选择分数不等于20的所有记录。如果我在Big Query中使用以下代码

SELECT * FROM [....] 

where
    Score <> 20

以下是结果:

Name  Score
Clare   30

问题是Brian的NULL记录也不等于20,因此应该在我的结果中。

除了特别检查NULLS之外还有更好的方法吗?

由于 利雅

4 个答案:

答案 0 :(得分:7)

SQL(以及类似SQL的BigQuery)具有三价逻辑。归结为,语句不能只是TRUE或FALSE,它们也可以是NULL。在这种情况下,语句NULL&lt;&gt; 20既不是TRUE也不是FALSE,它本身是NULL。将NULL值视为未知可能会有所帮助。由于我们不知道Brian的年龄,我们不知道它是否等于20.但是查询只返回where子句求值为TRUE的行,因此排除了带有Brian的行。

如果要包含NULL值,则必须显式写入

where (Score <> 20 or Score is null)

答案 1 :(得分:3)

select * from [...]
where coalesce(score, 0) <> 20

答案 2 :(得分:2)

另一个变种:

SELECT * FROM [...] if wherenull(得分&lt;&gt; 20,true)

我喜欢它表达“从这个表达式接受TRUE或NULL布尔值;拒绝FALSE。”

答案 3 :(得分:0)

如何实现 -

SELECT * FROM [....] 

where
    Score <> 20 or Scrore is NULL

有没有有效的方法 -

为避免这种性能查杀方式,我们应将列属性保留为not null