子查询问题 - 所有表达式必须具有显式名称

时间:2013-09-09 15:18:30

标签: sql teradata

不确定这里发生了什么以及为什么这不起作用。我收到以下错误:

“派生表中的所有表达式都必须具有明确的名称” - 使用teradata。

    select clm.c_clm
    ,clm.c_loc
    from 
    (select *
    from pearl_p.TLTC900_CLM clm) as cl
    left join
    (select 
    max(av.d_usr_udt_lst)
    from pearl_p.TLTC913_AVY av
    group by 1) as avy
    on cl.i_sys_clm = avy.i_sys_clm

3 个答案:

答案 0 :(得分:7)

子查询中的max(av.d_usr_udt_lst)没有明确的名称。你需要像这样别名:

max(av.d_usr_udt_lst) as "MaxThing"

所以查询看起来像

select clm.c_clm
    ,clm.c_loc
    from 
    (select *
    from pearl_p.TLTC900_CLM clm) as cl
    left join
    (select 
    max(av.d_usr_udt_lst) as "MaxThing"
    from pearl_p.TLTC913_AVY av
    group by 1) as avy
    on cl.i_sys_clm = avy.i_sys_clm

答案 1 :(得分:2)

除了该错误之外,您的加入中还有另一个错误:

select clm.c_clm, clm.c_loc
from (select *
      from pearl_p.TLTC900_CLM clm
     ) cl left join
     (select max(av.d_usr_udt_lst)
      from pearl_p.TLTC913_AVY av
      group by 1
     ) as avy
    on cl.i_sys_clm = avy.i_sys_clm
--------------------------^ This variable is not defined.

我想你可能想要这样的东西:

select clm.c_clm, clm.c_loc
from (select *
      from pearl_p.TLTC900_CLM clm
     ) cl left join
     (select i_sys_clm, max(av.d_usr_udt_lst) as maxdate
      from pearl_p.TLTC913_AVY av
      group by i_sys_clm
     ) avy
    on cl.i_sys_clm = avy.i_sys_clm and
       cl.<date column goes here> = avy.maxdate

答案 2 :(得分:1)

别名clm仅存在于定义cl别名的子查询中。因此,您无法在该子查询之外调用clm。将所有外部引用更改为cl并且您将没事。 在你的时候,你还应该摆脱SELECT *并明确识别你需要的colums。