首页 > 解决方案 > 在获取 SQL 联接中的所有列时遇到问题 - BigQuery SQL JOINS

问题描述

我在 Bigquery 中的 SQL 连接遇到了一些问题。我对 SQL 很陌生,所以我很确定这只是一些基本的理解类型问题。希望有人能指出我正确的方向。

样本加入:

SELECT domain,content1,content2,content3,content4 FROM `project.dataset.content` //10 rows
FULL OUTER JOIN 
(Select domain from `project.dataset.all_domains`) USING (domain) //100 rows - This is a single column list of all GUIDs in my dataset. Each Table uses the same GUIDs a portion of this list, so I am joining it to ensure I get all data returned to a single table
FULL OUTER JOIN 
(Select * [e.g.: domain,color1,color2,etc.] from`project.dataflowed.color`)  USING (domain) // 10 rows
FULL OUTER JOIN 
(Select * from `project.dataset.language`) USING (domain) //10 rows
FULL OUTER JOIN 
(Select * from `project.dataset.type`) USING (domain) //10 rows

我以为我明白这是如何工作的,但我似乎只是:

|| 域名 | 内容1 | 内容2 | 内容3 | 内容4 || <--100 行-->

但我希望得到:|| 域名 | 内容1 | 内容2 | 内容3 | 内容4 | 颜色 1 | 颜色 2... | 语言2 | 语言 2... | 类型1 | 类型2...|| <--100 行-->

所以除了原始(左?)表之外,我基本上没有得到任何列..?

有人可以帮我理解我做错了什么吗?

标签: sqljoingoogle-bigquery

解决方案


所以除了原始(左?)表之外,我基本上没有得到任何列..?

以下是 BigQuery 标准 SQL 并专门解决上述问题 - 我假设您的FULL OUTER JOIN部分是正确的并代表您期望的任何逻辑

#standardSQL
SELECT *
FROM `project.dataset.content` 
FULL OUTER JOIN `project.dataset.all_domains` USING(domain)
FULL OUTER JOIN `project.dataset.color` USING(domain)
FULL OUTER JOIN `project.dataset.language` USING(domain)
FULL OUTER JOIN `project.dataset.type` USING(domain)   

上面假设所有表之间唯一的公共字段名称是domain- 否则您需要在 SELECT 列表中显式列出所有输出字段并为不明确的字段提供别名。喜欢SELECT domain, content1, content2, color1, color2, ...


推荐阅读