【发布时间】:2018-06-05 20:36:01
【问题描述】:
查询可以在 BigQuery 上返回一个空表。发生这种情况的一个例子是,如果我在 BigQuery 上的查询中 join 一堆表并且连接的结果是一个空表,或者如果没有基于 where 子句的匹配项。
这是一个愚蠢的示例查询,它总是以空连接返回:
#standardSQL
WITH query1 AS (
SELECT 1 AS number, "one" AS message
), query2 AS (
SELECT 2 AS number, "two" AS message)
SELECT "query result" AS result, query1.*
FROM query1
JOIN query2 ON query1.number = query2.number;
查询将显示以下输出:Query returned zero records.
如果是这种情况,我想返回一条消息或默认行。但我不知道该怎么做。我试过使用IFNULL,但这仅适用于一列,而不是列数。使用 IF 语句给了我错误,因为您无法从 if 语句返回行。
我认为它给我的错误是Scalar subquery cannot have more than one column unless using SELECT AS STRUCT to build STRUCT values。
我能想到但不知道如何实现的另一件事是在末尾添加一个UNION,只有在前面的部分没有返回任何内容时才会触发。或者将现有查询包装在 WITH 语句子查询中,如果没有返回任何内容,则打印一条消息,否则执行 SELECT * FROM sub_query。
我想在结果为空表时仅显示一条消息,或者返回带有一些默认值的行。
我知道答案可能包含UNION 语句,因此不可能只显示一条消息。在这种情况下,我想改为显示默认行。对于上述示例查询,默认行如下所示:"No results found", NULL, NULL。
当查询返回一个非空表时,我希望它看起来与原始查询完全一样。所以不应该有任何添加列或更改结果的架构。
【问题讨论】:
标签: sql google-bigquery