sql—当数据列中有空值时,大查询筛选器出现问题

bcs8qyzn  于 2021-08-09  发布在  Java
关注(0)|答案(3)|浏览(363)

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

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的记录,但不返回任何记录。
你们都面临同样的问题吗?如果我们在其他领域面临更大的问题,请尽快通知我们。
你能告诉我这是怎么回事吗?

neekobn8

neekobn81#

另一个解决bigquery标准sql这种情况的方法是

WHERE IFNULL(NU != 'TAB', TRUE)
webghufk

webghufk2#

您正在寻找空安全比较。在标准sql中,通常使用操作符 IS [NOT] DISTINCT FROM :

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

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

SELECT * FROM Q1 WHERE NU IS NULL OR NU != 'TAB'
byqmnocz

byqmnocz3#

bigquery没有 NULL -安全操作员。不过,它也有类似的方法:

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

我承认 or 解决办法可能更清楚。

相关问题