在获取SQL联接中的所有列时遇到麻烦-BigQuery SQL JOINS

时间:2019-07-11 14:33:26

标签: sql join google-bigquery

我在Bigquery中使用SQL Join遇到了一些麻烦。我对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

我以为我了解这是如何工作的,但是我似乎正变得很:

||域| content1 | content2 | content3 | content4 || <-100行->

但是我希望得到: ||域| content1 | content2 | content3 | content4 |颜色1 |颜色2 ... |语言2 |语言2 ... |类型1 |类型2 ... || <-100行->

所以基本上不是从原始(左)表中获取列。.

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

1 个答案:

答案 0 :(得分:2)

  

所以基本上不是从原始(左)表中获取列。.

以下是用于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, ...