2017-05-03 26 views
0

为了提高效率,我试图找出是否存在一种语法,它允许我在表中使用该表别名完全在列并加入部分。SQL Server/TSQL:在连接表alias上别名列

我知道我可以在SELECT中对列进行别名,但是如果我使用select *(我知道,不是很好的做法),它将不可用。我归结一个例子来说明我想如何引用列名(doubleAlias):

SELECT * 
FROM [table1] AS tl 
    JOIN [table2] AS t2 
    ON t1.[column1] = t2.[column1] AS doubleAlias 
    WHERE doubleAlias = 'value'; 
--INSTEAD OF 
    --WHERE t2.[column1] = 'value'; 
+5

都能跟得上........... – SqlZim

+2

你可以做的,而不是一个应用语句加入,如果你真的之前选择想要的别名。 –

+0

你的目标是什么?虽然你应该提及你想要完成的是什么(也就是说,WHERE t2。[column1] ='value')有什么问题,但是这个问题写的是问如何实现某个任务(不是真的可能) ')。 – Eli

回答

1

在SQL Server中,你可以使用outer apply

SELECT t1.*, t2.* 
FROM [table1] tl JOIN 
    [table2] t2 
    ON t1.[column1] = t2.[column1] OUTER APPLY 
    (VALUES (t1.column1)) v(doubleAlias) 
WHERE doubleAlias = 'value'; 
+1

第三次不会给你第1列吗?如果使用内部连接,为什么外部应用而不是CROSS APPLY? –

+0

@AnthonyHancock。 。 。我理解第一个问题。这只是使用'select *'。我转而选择了两张桌子。至于'外部申请'与'申请'。 。 。无论如何。我选择'outer apply'仅仅是因为它强调第一个表中的所有行都保留,而不管条件如何。 –

1

有至少两个对列进行双重别名的方法,而不是您选择的语法。

  1. 考虑用视图替换table2,您可以在视图内尽可能多地替换列。

  2. 考虑一个子查询,因此与另一选择语句从A

    选择* 加入 (SELECT从乙Col1中ColAlias)上A.ColName = ColAliasÇ 替换表2

1

您可以将表格封装在CTE中,您可以在其中分配新列名称。

WITH t2 AS (
    SELECT *, column1 AS doubleAlias 
    FROM [table2] 
) 
SELECT * 
FROM [table1] AS tl 
JOIN t2 
    ON t1.[column1] = t2.[doubleAlias] 
WHERE t2.doubleAlias = 'value';