【问题标题】:Duplicate column name error when creating a table from a select从选择创建表时出现重复的列名错误
【发布时间】:2018-09-25 05:06:12
【问题描述】:

我连接了 3 个包含大量字段的表。由于重复的列名,post join 不断收到错误。使用别名并没有解决我的问题。

有没有办法在加入之前删除重复的列。我负担不起选择所需的列。

create temp table ashresults 
as 
select * 
from gp p 
  inner join gv v on p.fd1 = v.fd1 
  inner join gdc duc on p.id = duc.id 
where cast(v.rt as int) >= 1000 
and cast(v.cn as date ) >= '2016-07-01' 

此语句给出错误

【问题讨论】:

  • fd1id 出现在多个表中,但 select * 将它们全部选中。您必须明确列出所有列并仅选择其中之一或使用别名重命名它们。

标签: sql amazon-redshift ddl


【解决方案1】:

fd1 列存在于多个表中,所以你必须选择 table.column_name 否则会抛出错误

  select p.*,duc.*,gv.* 
    from gp p 
      inner join gv v on p.fd1 = v.fd1 
      inner join gdc duc on p.id = duc.id 
    where cast(v.rt as int) >= 1000 
    and cast(v.cn as date ) >= '2016-07-01' 

【讨论】:

  • 有没有办法删除重复的列而不是手动选择 100 个字段?
  • 您想从哪里删除?来自选择还是来自表格?
  • 来自选择结果而不是来自表格
  • @AdurthiAshwinSwarup 你在选择中明确写 tablename.columnname,你可以使用别名重命名它
【解决方案2】:

如果唯一重复的列是用于join 条件的列并且 id 仅在pduc 中,那么您可以使用using: p>

select * 
from gp p join
     gv v 
     using (fd1) join
     gdc duc 
     using (id)
where cast(v.rt as int) >= 1000 and
      cast(v.cn as date ) >= '2016-07-01';

【讨论】:

  • 这个答案太棒了!!!!我是 Redshift 的新手,来自 R 发现使用最方便的方法
猜你喜欢
  • 2015-04-17
  • 1970-01-01
  • 1970-01-01
  • 2016-06-01
  • 2017-12-18
  • 2018-11-28
  • 2022-07-28
  • 2021-12-10
  • 1970-01-01
相关资源
最近更新 更多