0

从今天开始,我在 Google Big Query 中遇到了一个奇怪的问题。以下查询不返回任何记录。昨天没看到这个问题

WITH Q1 AS (SELECT 'XC1' AS XC , NULL AS NU 
UNION ALL
SELECT 'XC2' AS XC , 'TAB' AS NU )

SELECT * FROM Q1
WHERE NU != 'TAB'

理想情况下,它应该显示 XC = XC1 的记录,但它不返回任何记录。

你们都面临同样的问题吗?当我们在其他领域面临更大的问题时,请尽快通知我们。

你能建议这里发生了什么吗?

4

3 回答 3

1

BigQuery Standard SQL 解决这种情况的另一种选择是

WHERE IFNULL(NU != 'TAB', TRUE)    
于 2020-05-19T01:14:30.463 回答
0

您正在寻找一个空安全比较。在标准 SQL 中,您通常会使用 operator IS [NOT] DISTINCT FROM

SELECT * FROM Q1 WHERE NU IS DISTINCT FROM 'TAB'

不幸的是,很少有数据库支持这种语法,BQ 不是其中之一。所以我们需要使用一个条件表达式:

SELECT * FROM Q1 WHERE NU IS NULL OR NU != 'TAB'
于 2020-05-18T22:28:37.033 回答
0

BigQuery 没有NULL-safe 运算符。不过,它确实有类似的方法:

where not ((nu = 'TAB') is false)

我承认or解决方案可能更清楚。

于 2020-05-19T00:33:25.543 回答