Sql 如何在Bigquery中查询多个嵌套字段?

Sql 如何在Bigquery中查询多个嵌套字段?,sql,nested,google-bigquery,bigquery-standard-sql,Sql,Nested,Google Bigquery,Bigquery Standard Sql,当我查询两级嵌套字段时,我遗漏了一些行 模式如下所示: Productid STRING REQUIRED Variants RECORD REPEATED Variants.SKU STRING NULLABLE Variants.Size STRING NULLABLE Variants.Prices RECORD REPEATED Variants.Prices.Country STRING NULLABLE Variants.Prices.Currenc

当我查询两级嵌套字段时,我遗漏了一些行

模式如下所示:

Productid   STRING  REQUIRED 
Variants    RECORD  REPEATED
Variants.SKU    STRING  NULLABLE
Variants.Size   STRING  NULLABLE
Variants.Prices RECORD  REPEATED
Variants.Prices.Country STRING  NULLABLE
Variants.Prices.Currency    STRING  NULLABLE
一些变体。价格记录为空

使用此查询查询此表时:

select Productid,Variants.SKU,Variants.Size
from ga-export-0000.feed.feed_dev
,UNNEST (Variants) AS Variants
我得到的行数比这一行多得多:

select Productid,Variants.SKU,Variants.Size
,Prices.Currency,Prices.Country
from ga-export-0000.feed.feed_dev
,UNNEST (Variants) AS Variants
,UNNEST(Variants.Prices) as Prices 
这是因为它不会返回缺少Variants.Prices的行


如何修改第二个查询,使其返回所有行,如果变量。Prices丢失,则显示NULL

您可能对文档中的主题感兴趣。使用
左连接
,而不是逗号,例如:

select Productid,Variants.SKU,Variants.Size
,Prices.Currency,Prices.Country
from `ga-export-0000.feed.feed_dev`
,UNNEST (Variants) AS Variants
LEFT JOIN UNNEST(Variants.Prices) as Prices 

如果该数组为空,则返回
NULL
Prices

您可能对文档中的主题感兴趣。使用
左连接
,而不是逗号,例如:

select Productid,Variants.SKU,Variants.Size
,Prices.Currency,Prices.Country
from `ga-export-0000.feed.feed_dev`
,UNNEST (Variants) AS Variants
LEFT JOIN UNNEST(Variants.Prices) as Prices 

如果该数组为空,则返回
NULL
Prices

您的比率较低。重要信息:因此,您必须使用投票下方张贴答案左侧的勾号来标记已接受的答案。这将提高你的利率。通过访问此链接了解其工作原理:谢谢@Pentium10,刚刚浏览了我所有的问题并标记了已接受的答案。您的评分很低。重要信息:因此,您必须使用投票下方张贴答案左侧的勾号来标记已接受的答案。这将提高你的利率。通过访问此链接了解其工作原理:谢谢@Pentium10,刚刚浏览了我所有的问题并标记了已接受的答案。谢谢@Elliott,这很有效!现在如何使用where子句?当我执行
where Prices.Country in('GB',NULL)
时,我只得到有Prices.Country=GB的行,而没有这些空行。中的
如果元素为
NULL
,则返回
NULL
,因此不能将其用于比较。请改用
Prices.Country为空或Prices.Country='GB'
。谢谢@Elliott!当我尝试
where Prices.Country='GB'
条件时,仍然会得到如下结果:。我的条件有什么问题,我应该如何使用它?根据该输出,您似乎选择了原始的
价格
,作为
选择
列表的一部分,而不是
最新
产生的价格。例如,将
UNNEST
中的一个调用为
Price
(单数)可能是个好主意。谢谢@Elliott,这很有效!现在如何使用where子句?当我执行
where Prices.Country in('GB',NULL)
时,我只得到有Prices.Country=GB的行,而没有这些空行。
中的
如果元素为
NULL
,则返回
NULL
,因此不能将其用于比较。请改用
Prices.Country为空或Prices.Country='GB'
。谢谢@Elliott!当我尝试
where Prices.Country='GB'
条件时,仍然会得到如下结果:。我的条件有什么问题,我应该如何使用它?根据该输出,您似乎选择了原始的
价格
,作为
选择
列表的一部分,而不是
最新
产生的价格。例如,最好将
UNNEST
中的一个调用为
Price
(单数)。