我在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行->
所以基本上不是从原始(左)表中获取列。.
有人可以帮助我了解我在做错什么吗?
答案 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, ...