我在BigQuery中使用以下SQL代码创建了一个通用表表达式,其中包含一个范围内的日期列表:
WITH calendar AS(
SELECT * FROM UNNEST(GENERATE_DATE_ARRAY('2020-01-01', CURRENT_DATE(), INTERVAL 1 DAY))
)
如果我将其作为不带"WITH"子句的查询运行,则查询将返回一个名为"f0_"的列(您应该能够自己重现此结果(。
现在,我遇到的问题是,当我试图在单独的SELECT语句中访问该列时,名称"f0_"无法识别。("无法识别的名称:f0_"(
WITH calendar AS(
SELECT * FROM UNNEST(GENERATE_DATE_ARRAY('2020-01-01', CURRENT_DATE(), INTERVAL 1 DAY))
)
SELECT f0_
FROM calendar
当然,这个查询本身是没有意义的,因为我可以在不使用WITH子句的情况下运行第一个SELECT语句,而不需要第二个SELECT语句。我明白了。不过,我追求的最终结果有点复杂,上面的逻辑应该足以解释我遇到的问题。基本上,如果在我作为独立查询运行公共表表达式时,该公共表表达式中的SELECT语句返回一个名为"f0_"的列,那么为什么我的第二个SELECT语句在引用一个似乎应该返回一个称为"f0\"的列时会返回错误。
我认为这是一个类似于"f0_"不是真实名称的东西——它只是在没有任何指定名称的情况下分配的东西,或者当您将其作为通用表表达式而不是简单的SELECT语句运行时,命名的工作方式可能会有所不同。有没有一种方法可以在我的公共表表达式中对未测试的日期数组进行别名,以便在查询的第二部分中访问它?或者其他解决方案?
只需使用别名:
WITH calendar AS(
SELECT *
FROM UNNEST(GENERATE_DATE_ARRAY('2020-01-01', CURRENT_DATE(), INTERVAL 1 DAY)) as dt
)
SELECT dt
FROM calendar