Google bigquery 我可以在Google BigQuery中对3个不同的表进行完整的外部联接吗

Google bigquery 我可以在Google BigQuery中对3个不同的表进行完整的外部联接吗,google-bigquery,Google Bigquery,project.dataset1.table1和project.dataset3.table3都有相同的列名 我得到错误“结果中不支持重复的列名” 在BigQuery中组合这些表的正确方法是什么 让我先解释一下这里发生了什么 在下面的示例中-重复列名而不是name没有问题,但是可以通过在中使用()将名称设置为vsON SELECT * FROM `project.dataset1.table1` t1 FULL OUTER JOIN `project.dataset2.table2` t2

project.dataset1.table1
project.dataset3.table3
都有相同的列名

我得到错误“结果中不支持重复的列名”


在BigQuery中组合这些表的正确方法是什么

让我先解释一下这里发生了什么

在下面的示例中-重复列名而不是
name
没有问题,但是可以通过在
中使用()将名称设置为
vs
ON

SELECT * 
FROM `project.dataset1.table1` t1  
FULL OUTER JOIN `project.dataset2.table2` t2 
USING (Name) 
FULL OUTER JOIN `project.dataset3.table3` t3 
USING (Name) 
WHERE Name LIKE '%John%'
在下面的第二个示例中,您会看到重复的额外字段
dup_col
(在表1和表2中)-因此结果中的错误-
重复列名不受支持

#standardSQL 
WITH 
  `project.dataset1.table1` AS (SELECT 'John' Name, 'a' x ),  
  `project.dataset2.table2` AS (SELECT 'John' Name, 'b' y),  
  `project.dataset3.table3` AS (SELECT 'John' Name, 'c' z)
SELECT * 
FROM `project.dataset1.table1` t1  
FULL OUTER JOIN `project.dataset2.table2` t2 USING (Name) 
FULL OUTER JOIN `project.dataset3.table3` t3 USING (Name) 
WHERE Name LIKE '%John%'   
最后,在下面的示例中,您将了解如何解决该问题

#standardSQL 
WITH 
  `project.dataset1.table1` AS (SELECT 'John' Name, 'a' x, 'qq' dup_col),  
  `project.dataset2.table2` AS (SELECT 'John' Name, 'b' y, 'ww' dup_col),  
  `project.dataset3.table3` AS (SELECT 'John' Name, 'c' z)
SELECT * 
FROM `project.dataset1.table1` t1  
FULL OUTER JOIN `project.dataset2.table2` t2 USING (Name) 
FULL OUTER JOIN `project.dataset3.table3` t3 USING (Name) 
WHERE Name LIKE '%John%'   
正如您在这里看到的,我们添加了
除了(dup_col)
,这将从输出中消除重复的列,但是我们显式地添加了具有不同别名的列

所以,现在输出中没有重复的列,如下所示

#standardSQL 
WITH 
  `project.dataset1.table1` AS (SELECT 'John' Name, 'a' x, 'qq' dup_col),  
  `project.dataset2.table2` AS (SELECT 'John' Name, 'b' y, 'ww' dup_col),  
  `project.dataset3.table3` AS (SELECT 'John' Name, 'c' z)
SELECT * EXCEPT(dup_col), 
  t1.dup_col AS t1_dup_col, 
  t2.dup_col AS t2_dup_col
FROM `project.dataset1.table1` t1  
FULL OUTER JOIN `project.dataset2.table2` t2 USING (Name) 
FULL OUTER JOIN `project.dataset3.table3` t3 USING (Name) 
WHERE Name LIKE '%John%'     
希望您能够将其应用于特定的重复列
如果你有不止一个名字,只需将它们列在除

Row Name    x   y   z   t1_dup_col  t2_dup_col   
1   John    a   b   c   qq          ww      

为什么不指定要选择的确切列,或者为这些具有公共名称的列使用别名?@NicoHaase-explicit list是解决这一问题的合理方法,如果这三个表的列数更不合理。但如果列的数量足够大,这将是一个痛苦的手;o)
EXCEPT(dup_col1, dup_col2, dup_col3)