2017-05-03 54 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';