【问题标题】:Duplicate columns in a double left join - bigquery sql双左连接中的重复列 - bigquery sql
【发布时间】:2021-10-25 02:39:21
【问题描述】:

我正在处理三个需要连接的表。这些表是“默认”、“程序”和“事务”。事务和程序需要加入,然后需要加入默认值。我不断收到此错误:

'当存在目标表时,结果中不支持重复的列名。发现重复项:url、id、idNetwork、type、updated'。

这是我要运行的代码:

with renamed_b as (
    select *, url as b_url, id as b_id, idNetwork as b_idNetwork, type as b_type, updated as b_updated from `{{ extract.program.sql_source }}`
), renamed_a as (
    select *, url as a_url from `{{ extract.default.sql_source }}`
) 
select * from renamed_a a
  left join renamed_b b
    on a.commission_transaction_id = b.id
  left join `{{ extract.transaction.sql_source }}` d
    on d.idProgram = b.id 

id、idNetwork、type 和 updated 不会出现在默认表中,我已经重命名了 program 表中的列,所以我真的不清楚重复列的来源。

任何建议将不胜感激。请让我知道是否有更多有助于包括的信息(:

【问题讨论】:

  • 以下代表什么? {{ extract.transaction.sql_source }} ...如果在执行前扩展/替换,则显示扩展后的最终 SQL(也包括所有类似的表达式)。当错误涉及表/视图的列时,最好显示表/视图定义。
  • 如果with 子句中的子查询是正确的,那么至少urlid 存在于两个表中(重命名),因为您首先选择了*
  • 要排除已重命名的列,您可以在外部子查询中使用select * except <cols_to_be_renamed>Check the syntax

标签: sql duplicates


【解决方案1】:

尝试明确选择您想要的所有列,而不是使用*

当您 select *, url as b_url [..] 时,会出现 urlb_url 列(这意味着您的两个 CTE 都包含一个名为 url 的列!)因此出现重复列错误。

【讨论】:

    猜你喜欢
    • 2021-12-07
    • 2017-11-06
    • 2014-07-29
    • 2017-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-02
    相关资源
    最近更新 更多