在JOIN ON子句中引用列别名

时间:2018-05-17 20:46:52

标签: sql sql-server

我有一个查询是下一个:

select upper(vchPaterno+' '+vchMaterno+' '+vchNombre) as Nombre
from LK_REP.db_intranet.[dbo].[Empleado_tb] p2 inner join
    LK_SAP.[P01].[p01].[PA0001] p1
    on p1.SNAME = p2.Nombre

有可能让这个加入吗?

如果执行此操作,则错误消息为:

Msg 207,Level 16,State 1,Line 11 列名称无效' Nombre'。

3 个答案:

答案 0 :(得分:0)

您可以重复表达式:

select upper(p2.vchPaterno + ' ' + p2.vchMaterno+' ' + p2.vchNombre) as Nombre
from LK_REP.db_intranet.[dbo].[Empleado_tb] p2 inner join
     LK_SAP.[P01].[p01].[PA0001] p1
     on p1.SNAME = upper(p2.vchPaterno + ' ' + p2.vchMaterno+' ' + p2.vchNombre);

这是最简单的方法。对于这个问题,我建议您将列作为计算列添加到表中:

alter table LK_REP.db_intranet.[dbo].[Empleado_tb]
    add nombre as (upper(p2.vchPaterno + ' ' + p2.vchMaterno+' ' + p2.vchNombre) persisted;

create index idx_Empleado_tb_nombre on LK_REP.db_intranet.[dbo].[Empleado_tb](nombre);

计算列和索引有利于提高性能。

答案 1 :(得分:0)

您不能使用别名来引用列,除非它在您的ORDER BY

试试这个:

SELECT UPPER(vchPaterno+' '+vchMaterno+' '+vchNombre) as Nombre
FROM LK_REP.db_intranet.[dbo].[Empleado_tb] p2 
INNER JOIN LK_SAP.[P01].[p01].[PA0001] p1
    ON p1.SNAME = UPPER(vchPaterno+' '+vchMaterno+' '+vchNombre)

答案 2 :(得分:0)

不,您可以使用AS中的列而不是此处。在连接中,您需要一个列名(外键)