我想在大查询中连接两个具有公共列的表?
I want to join two tables with a common column in Big query?
要加入 tables,我正在使用以下查询。
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;
查询有效,但联接的 table 只有两列 uservalue1 和 uservalue2。
我想保留 table 中的所有列。知道如何实现吗?
如果您想要所有列,请不要使用子查询:
SELECT *
FROM [projectname.FullData_Edited] as FullData_Edited JOIN
[projectname.InstallDate] as InstallDate
ON FullData_Edited.uservalue1 = InstallDate.uservalue2;
您可能必须列出要避免列名重复的特定列。
当你这样做的时候,你也应该切换到标准 SQL。
#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
或(最好)
#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
注意,在这种情况下使用 SELECT *
会导致 Ambiguous column name
错误,因此最好在输出 [=22= 中明确列出你需要的 columns/fields ]
解决方法是使用 USING()
语法,如下例所示。
假设 user
是唯一不明确的字段 - 它可以解决问题
#standardSQL
SELECT *
FROM `projectname.datasetname.FullData_Edited` AS FullData_Edited
JOIN `projectname.datasetname.InstallDate` AS InstallDate
USING (user)
例如:
#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)
returns
user field1 field2
1 a b
而使用 ON FullData_Edited.user = InstallDate.user
给出以下错误
Error: Duplicate column names in the result are not supported. Found duplicate(s): user
要加入 tables,我正在使用以下查询。
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;
查询有效,但联接的 table 只有两列 uservalue1 和 uservalue2。 我想保留 table 中的所有列。知道如何实现吗?
如果您想要所有列,请不要使用子查询:
SELECT *
FROM [projectname.FullData_Edited] as FullData_Edited JOIN
[projectname.InstallDate] as InstallDate
ON FullData_Edited.uservalue1 = InstallDate.uservalue2;
您可能必须列出要避免列名重复的特定列。
当你这样做的时候,你也应该切换到标准 SQL。
#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
或(最好)
#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
注意,在这种情况下使用 SELECT *
会导致 Ambiguous column name
错误,因此最好在输出 [=22= 中明确列出你需要的 columns/fields ]
解决方法是使用 USING()
语法,如下例所示。
假设 user
是唯一不明确的字段 - 它可以解决问题
#standardSQL
SELECT *
FROM `projectname.datasetname.FullData_Edited` AS FullData_Edited
JOIN `projectname.datasetname.InstallDate` AS InstallDate
USING (user)
例如:
#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)
returns
user field1 field2
1 a b
而使用 ON FullData_Edited.user = InstallDate.user
给出以下错误
Error: Duplicate column names in the result are not supported. Found duplicate(s): user