【问题标题】:sql query ambiguous column after join连接后sql查询不明确的列
【发布时间】:2021-10-03 22:58:30
【问题描述】:

我正在使用 redshift 来查询数据 我使用了以下查询:

Select tenant_name

From (

SELECT *  from fct.st_member_development as st_member_development

inner join
(SELECT *  from fct.st_contract_development) u
on  st_member_development.tenant_name =u.tenant_name and st_member_development.fk_organization_unit =u.fk_organization_unit and st_member_development.date=u.date
)
limit 5

对于我要加入的表,它们都有tenant_name 列

我的查询失败并出现以下错误:错误:列引用“租户名称”不明确

知道如何解决这个问题吗?

【问题讨论】:

  • 不要使用*,明确指定您的列。并使用表别名来限定列
  • 您是否检查过tenant_name 列是否出现在两个表中?

标签: sql join amazon-redshift


【解决方案1】:
Select u.tenant_name
From fct.st_member_development as st_member_development
    inner join fct.st_contract_development u
    on  st_member_development.tenant_name = u.tenant_name and                         
    st_member_development.fk_organization_unit =u.fk_organization_unit and 
    st_member_development.date=u.date
limit 5

【讨论】:

    【解决方案2】:

    显然,最简单的解决方案是不使用子查询。

    如果您使用的是子查询,那么您可以列出您需要的列:

    Select mc.tenant_name
    from (select md.tenant_name 
          from fct.st_member_development md join
               fct.st_contract_development cd
               on md.tenant_name = cd.tenant_name and  
                  md.fk_organization_unit = cd.fk_organization_unit and
                  md.date = cd.date
        ) mc
    limit 5;
    

    (注意使用表别名来简化编写查询。)

    如果唯一重复的列名是JOIN中使用的列,那么你也可以使用USING

    select mc.tenant_name
    from (select *
          from fct.st_member_development md join
               fct.st_contract_development cd
               using (tenant_name, fk_organization_unit, md.date)
        ) mc
    limit 5;
    

    USING 子句防止重复项包含在SELECT * 中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-18
      • 2022-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-04
      相关资源
      最近更新 更多