首页 > 解决方案 > 连接表,选择所有但重命名几个 SQL BQ

问题描述

我想加入两个具有 4 个相同列名(ID、FieldID、FieldCropYear、UpdateUTC)的表。我想在 FieldID 上加入这两个表。

我使用了这个查询:

 SELECT * FROM `xxx.yyy.111` AS ACT
    INNER JOIN `xxx.yyy.222` AS BOUND
    ON BOUND.FieldID = ACT.FieldID
    AND BOUND.FieldCropYear = ACT.FieldCropYear

运行它后,我收到以下错误:Duplicate column names in the result are not supported. Found duplicate(s): ID, FieldID, FieldCropYear, UpdateUTC

是否可以选择 * 但在一个数据框中重命名这 4 列?处理它的最有效方法是什么?有没有可能是这样的:

    SELECT * 
EXCEPT(ID, FieldID, UpdateUTC, FieldCropYear), 
                     ID as ID_b,
                     FieldID as FieldID_b,
                     UpdateUTC as UpdateUTC_b,
                     FieldCropYear as FieldCropYear_b
FROM `xxx.yyy.222` AS BOUND
    INNER JOIN `xxx.yyy.111` AS ACT
    ON BOUND.FieldID_b = ACT.FieldID
    AND BOUND.FieldCropYear_b = ACT.FieldCropYear

标签: sqlgoogle-bigquery

解决方案


签出using()而不是on- 但您必须使用所有字段:

 SELECT * FROM `xxx.yyy.111` AS ACT
    INNER JOIN `xxx.yyy.222` AS BOUND
    USING(ID, FieldID, FieldCropYear,UpdateUTC)

如果这没有意义,因为某些字段实际上是不同的,则重命名子查询中的某些字段:

 SELECT * FROM `xxx.yyy.111` AS ACT
    INNER JOIN 
     (select * EXCEPT(ID, UpdateUTC), ID AS actID, UpdateUTC as actUpdateUTC FROM `xxx.yyy.222`) AS BOUND
    USING(FieldID, FieldCropYear)

没有测试代码,但我希望方法很清楚


推荐阅读