SQL Server/TSQL : 在 table alias in join 上为列添加别名
SQL Server/TSQL : Aliasing a column on table alias in join
为了提高效率,我试图找出是否有一种语法允许我完全在 from 部分和 join 部分中使用 table 别名来为 table 上的列添加别名.
我知道我可以为 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';
在SQL服务器中,可以使用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';
至少有两种为列添加双重别名的方法,只是不使用您选择的语法。
考虑用视图替换 table2,您可以在视图中根据需要为列添加别名。
考虑一个子查询,所以用另一个select语句替换table2
select *
从 A 加入
(SELECT 来自 B 的 Col1 ColAlias) C
在 A.ColName = ColAlias
您可以将 table 包装在 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';
为了提高效率,我试图找出是否有一种语法允许我完全在 from 部分和 join 部分中使用 table 别名来为 table 上的列添加别名.
我知道我可以为 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';
在SQL服务器中,可以使用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';
至少有两种为列添加双重别名的方法,只是不使用您选择的语法。
考虑用视图替换 table2,您可以在视图中根据需要为列添加别名。
考虑一个子查询,所以用另一个select语句替换table2
select * 从 A 加入 (SELECT 来自 B 的 Col1 ColAlias) C 在 A.ColName = ColAlias
您可以将 table 包装在 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';