我想将两个表与Big查询中的公共列联接吗?

VSR*_*VSR 1 sql join google-bigquery legacy-sql

要加入表,我正在使用以下查询。

SELECT *
FROM(select user as uservalue1 FROM [projectname.FullData_Edited]) as FullData_Edited 
JOIN (select user as uservalue2 FROM [projectname.InstallDate]) as InstallDate 
ON FullData_Edited.uservalue1=InstallDate.uservalue2;
Run Code Online (Sandbox Code Playgroud)

该查询有效,但是联接的表只有两列uservalue1和uservalue2。我想使所有列都存在于两个表中。知道如何实现吗?

Mik*_*ant 5

#legacySQL
SELECT <list of fields to output>
FROM [projectname:datasetname.FullData_Edited] AS FullData_Edited
JOIN [projectname:datasetname.InstallDate] AS InstallDate
ON FullData_Edited.user = InstallDate.user
Run Code Online (Sandbox Code Playgroud)

或(最好)

#standardSQL
SELECT <list of fields to output>
FROM `projectname.datasetname.FullData_Edited` AS FullData_Edited
JOIN `projectname.datasetname.InstallDate` AS InstallDate
ON FullData_Edited.user = InstallDate.user
Run Code Online (Sandbox Code Playgroud)

注意,SELECT *在这种情况下使用会导致Ambiguous column name错误,因此最好在输出中放入您需要的列/字段的显式列表

解决方法是使用USING()语法,如下例所示。
假设这user是唯一的模棱两可的领域-它可以解决问题

#standardSQL
SELECT *
FROM `projectname.datasetname.FullData_Edited` AS FullData_Edited
JOIN `projectname.datasetname.InstallDate` AS InstallDate
USING (user)
Run Code Online (Sandbox Code Playgroud)

例如:

#standardSQL
WITH `projectname.datasetname.FullData_Edited` AS (
  SELECT 1 user, 'a' field1
),
`projectname.datasetname.InstallDate` AS (
  SELECT 1 user, 'b' field2
)
SELECT *
FROM `projectname.datasetname.FullData_Edited` AS FullData_Edited
JOIN `projectname.datasetname.InstallDate` AS InstallDate
USING (user)
Run Code Online (Sandbox Code Playgroud)

退货

user    field1  field2   
1       a       b    
Run Code Online (Sandbox Code Playgroud)

而使用ON FullData_Edited.user = InstallDate.user给出以下错误

Error: Duplicate column names in the result are not supported. Found duplicate(s): user